Answered by:
"SuspentionManager.cs" in the model project of universal app

Question
-
hi there,when the method "RestoreAsync()" be called in app.cs,the parameter "_registeredFrames" must be empty,why the method does a foreach in "_registeredFrames",when the method called,current status must be Terminated or NotRunning,for no frames have added in it! please help me,thanks very much
public static async Task RestoreAsync(String sessionBaseKey = null)
{
_sessionState = new Dictionary<String, Object>();try
{
// Get the input stream for the SessionState file
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(sessionStateFilename);
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
// Deserialize the Session State
DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);
_sessionState = (Dictionary<string, object>)serializer.ReadObject(inStream.AsStreamForRead());
}// Restore any registered frames to their saved state
foreach (var weakFrameReference in _registeredFrames)
{
Frame frame;
if (weakFrameReference.TryGetTarget(out frame) && (string)frame.GetValue(FrameSessionBaseKeyProperty) == sessionBaseKey)
{
frame.ClearValue(FrameSessionStateProperty);
RestoreFrameNavigationState(frame);
}
}
}
catch (Exception e)
{
throw new SuspensionManagerException(e);
}
}Tuesday, January 20, 2015 9:55 AM
Answers
-
before restoring the _registeredFrame list must be filled. otherwise the SuspensionManager doesnt know which frames should be restored.
SuspensionManager isnt restoring the frames it self, but the state of the registered frames
Microsoft Certified Solutions Developer - Windows Store Apps Using C#
- Edited by Dave SmitsMVP Tuesday, January 20, 2015 10:39 AM
- Marked as answer by Randolph Zhang Wednesday, January 21, 2015 3:47 AM
Tuesday, January 20, 2015 10:38 AM -
thanks dave,i got the answer,the true thing is that the previous state saved to local file,and the new frame registered can get the state by the same key
- Marked as answer by Randolph Zhang Wednesday, January 21, 2015 3:47 AM
Wednesday, January 21, 2015 3:47 AM
All replies
-
before restoring the _registeredFrame list must be filled. otherwise the SuspensionManager doesnt know which frames should be restored.
SuspensionManager isnt restoring the frames it self, but the state of the registered frames
Microsoft Certified Solutions Developer - Windows Store Apps Using C#
- Edited by Dave SmitsMVP Tuesday, January 20, 2015 10:39 AM
- Marked as answer by Randolph Zhang Wednesday, January 21, 2015 3:47 AM
Tuesday, January 20, 2015 10:38 AM -
thanks dave,i got the answer,the true thing is that the previous state saved to local file,and the new frame registered can get the state by the same key
- Marked as answer by Randolph Zhang Wednesday, January 21, 2015 3:47 AM
Wednesday, January 21, 2015 3:47 AM