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