0

所以,我正在开发一个联系人管理系统,我正在尝试添加一个联系人。我没有在ViewModels之间跳转(联系人和主要联系人页面是分开的),而是决定从视图中获取数据,创建联系人,将其添加到列表中,然后序列化该列表。然后,当我回到主页面时,我将该列表反序列化。由于反序列化而获取unauthorisedAccessException。 c#/ Windows phone 8.1

这个工作正常(没有优化,这只是一个简单的大学项目),因为数据被添加到JSON文件中。我的问题是 - 当我回到主页面时,由于我的流上出现UnauthorisedAccessException,列表不会更新。反序列化方法是:

   private async void buildMyListWithJsonAsync(){ 
      ObservableCollection<Contact> list = new ObservableCollection<Contact>(); 
      try 
      { 
       string JSONFILENAME = "contacts.json"; 
       string content = " "; 
       StorageFile File = await ApplicationData.Current.LocalFolder.GetFileAsync(JSONFILENAME); 
       using (IRandomAccessStream testStream = await File.OpenAsync(FileAccessMode.Read)){ 
        using (DataReader dreader = new DataReader(testStream)){ 
         uint length = (uint)testStream.Size; 
         await dreader.LoadAsync(length); 
         content = dreader.ReadString(length); 
         list = JsonConvert.DeserializeObject<ObservableCollection<Contact>>(content); 
        } 


       } 
       contactlist = new ObservableCollection<Contact>(); 
       foreach (Contact c in list) 
       contactlist.Add(c); 

      } 
      catch (Exception e) 
      { e.ToString(); } 
     } 

任何帮助或援助,将不胜感激。

回答

0

我想冒险一个有教养的猜测,这个问题是围绕线程和你的ObservableCollection。 ObservableCollections不是线程安全的,并且涉及在它们创建的UI线程上引发事件。& StorageFile API是基于所有异步线程的。 试着从异步线程拉回字符串,然后在主UI线程上执行序列化和反序列化,而这可能很好地解决它。

+0

对不起,我不完全确定你在暗示我做什么。该流除了当我返回...但是,当我使用相同的流来显示应用程序启动列表,它运行通过没有错误。 – Adam 2015-03-19 18:02:35

+1

我想我误解你原来的帖子是由反序列化(或至少通过它的使用)引发的异常,而它听起来像是第二次尝试访问文件时的文件许可事情,而第一次工作正常?如果是这样,这听起来像文件被以前的访问保持,并需要一些明确的释放。这个问题是否为您解答:http://stackoverflow.com/a/11243593/4670514 – mcr 2015-03-19 22:58:14