2013-02-26 71 views
1

我建立簡單的WP8應用更新ListPicker無效跨線程訪問。我試圖更新ListPicker控制用的集合,是另一個類的成員。這個類通過異步調用獲取這些數據。當接收到響應觸發MainPage執行該更新ListPicker的事件。System.UnauthorizedAccessException的:而在WP8

public void coinUtil_ReceivedPriceEvent(object sender, EventArgs e) 
    { 
     PopulateListPicker(); 
    } 

    public void PopulateListPicker() 
    { 

     try 
     { 
      foreach (KeyValuePair<string, double> item in coinUtil.cointPriceList) 
      { 

       listPickerCurrencies.Items.Add(item.Key); 
      } 
     } 
     catch (UnauthorizedAccessException ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex.ToString()); 
     } 

    } 

,我發現了以下異常:

類型的第一次機會異常 'System.UnauthorizedAccessException的' 發生在System.Windows.ni.dll

類型的異常「System.UnauthorizedAccessException的」發生在 System.Windows.ni.dll和管理/本地 邊界System.UnauthorizedAccessException的前沒有處理:無效的跨線程 訪問。在MS.Internal.XcpImports.CheckThread()在 System.Windows.DependencyObject.GetValueInternal(的DependencyProperty DP)處System.Windows.Controls.ItemsControl.get_Items System.Windows.FrameworkElement.GetValueInternal(的DependencyProperty DP)()在 BitCoinTail.MainPage.PopulateListPicker()

奇怪的是,當我嘗試訪問該類別的另一成員用一個簡單的字符串,它工作正常。我在WP7中開發了一點,但不記得曾經有過這種例外。任何人都可以看到我做錯了什麼?

+0

我認爲你需要使用調度,以確保UI更新UI線程。 – EricLaw 2013-02-26 22:04:35

回答

0

您需要使用調度編組到適當的線程調用 - 參見http://www.codeproject.com/Articles/368983/Invoking-through-the-Dispatcher-on-Windows-Phone-a

+0

我碰上這樣的解決方案,而我是谷歌搜索,但我不明白的地方這從何而來。我怎樣才能訪問** String **,但我無法訪問** List **對象? – Booyaches 2013-02-26 22:10:23

+1

我想這將取決於它是否會導致UI更新......雖然不是100%確定 – CalC 2013-02-26 22:11:47

+0

但它確實但並非直接。在'SomeClass'的名單與上'MainPage'值觸發事件應對程序填充的事實。我將嘗試實施分派器並查看會發生什麼。 – Booyaches 2013-02-26 22:31:25

相關問題