2013-07-11 92 views
2

我正在創建一個小型WP8應用程序,該應用程序的更新從Windows Azure Mobile Service接收數據並將其顯示給用戶。從wp8應用程序中的單獨線程更新UI

現在我有一個單獨的線程,其工作是與Azure服務進行交互,獲取數據並使用數據更新UI,而主UI線程正在做其他事情。

我嘗試以下方法,但失敗了......

  1. 創建一個單獨的線程,但它不能訪問控件

  2. 創建一個BackgroundWorker線程這個線程不能更新UI,但是當我稱Azure移動服務等待工作者線程調用其完成事件的方法,然後當我調用ProgressChanged事件時,它將失敗,但異常:操作已完成

有人可以幫我嗎?

回答

5

您可以通過使用調度程序的BeginInvoke方法更新從一個單獨的線程的UI:

Deployment.Current.Dispatcher.BeginInvoke(() => 
{ 
    //Update the UI controls here 
}); 

準確地說,它實際上不會更新從單獨的線程的用戶界面,但它會排隊這個動作可以讓主線程在可用時執行它。

0

由於您使用的是Azure移動服務提供的async方法,因此您可以自己使用async方法。不需要工作線程或後臺線程。

private async Task UpdateUI() 
{ 
    var result = await MyAzureMobileServiceCall(); 
    MyUIElement.DataContext = result; 
} 
相關問題