2011-07-02 78 views
0
private void btn_friends_pressed(object sender, RoutedEventArgs e) 
     { 
      NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative)); 
     } 

当我按下按钮,我去好友页面,从孤立storage.Than加载很多朋友,我按“后退”按钮,进入菜单页面,当我按下再次按钮,我有“IsolatedStorageFileStream不允许操作”。信息。 我如何无法重新加载页面并将其保存在RAM中。 喜欢的东西:导航无需重新加载

if (Friends.Page.IsRunning==true) 
    NavigationService.Navigate("/Friends.xaml"); 
else 
    NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative)); 

回答

1

每当你导航到一个页面,它会自动重新加载。一旦你离开它们,页面本身就不会留在内存中。如果你想存储它的内存,而不是每次都从独立存储中读取它,那么你可以简单地创建一个包含静态Liststatic类,它存储你的朋友。一旦你加载了你的朋友,根据他们的类型,你可以将它添加到列表中。无论何时您需要访问它们,只需从静态List中调用即可。例如,在您的解决方案,创建一个新的类:

using ... //your using directives 

namespace MyApp //Your project Namespace 
{ 
    public static class FriendsStorage //rename `FriendsStorage` to whatever you want 
    { 
     public static List<Friends> ListOfFriends = new List<Friends>(); //Your list 
    } 
} 

要设置它,你可以从IsolatedStorage加载信息,并将其添加到列表:

foreach(Friend f in Friends) 
    FriendsStorage.ListOfFriends.Add(f); 

每当你需要查询好友列表,你可以这样调用:

var friendList = FriendsStorage.ListOfFriends; 

即使你使用上面的方法,你应该尝试修复你得到的错误。你可以发布你的隔离存储代码吗?

1

如果你想摆脱的错误信息,你应该在使用()块使用流,

using (var stream = new IsolatedStorageFileStream(...)) 
{ 
    // load your data here 
} 

关于储蓄网页,它通常不是一个好主意,因为你的记忆会exponentialy增长并且您的应用程序将非常无响应。

虽然你可以随时使用App.xaml.cs作为应用程序的全局实例缓存一些数据来源:

List<Friend> _Friends; 
List<Friend> _Friends 
{ 
    get 
    { 
     if(_Friends == null) _Friends = GetFriends(); 
     return _Friends; 
    } 
} 

,但如果你这样做是非常小心,不要存储的负载数据。

相关问题