2

我正在创建一个小型 WP8 应用程序,它更新从 Windows Azure 移动服务接收数据并将其显示给用户。

现在我有一个单独的线程,它的工作是与 azure 服务交互,获取数据并使用数据更新 UI,而主 UI 线程正在做其他事情。

我尝试了以下方法但失败了......

  1. 创建了一个单独的线程,但该线程无法更新 UI,因为它无法访问控件

  2. 创建了一个BackgroundWorker线程,但是当我调用 Azure 移动服务 await 方法时,工作线程调用其完成的事件,然后当我调用该ProgressChanged事件时它失败并出现异常:操作已经完成

有人可以帮帮我吗?

4

2 回答 2

5

BeginInvoke您可以使用调度程序的方法从单独的线程更新 UI :

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

准确地说,它实际上不会从单独的线程更新 UI,但它会将操作排队,以便主线程可以在可用时执行它。

于 2013-07-11T17:06:10.583 回答
0

由于您使用的async是 Azure 移动服务提供的方法,因此您可以async自己使用一种方法。不需要工作线程或后台线程。

private async Task UpdateUI()
{
  var result = await MyAzureMobileServiceCall();
  MyUIElement.DataContext = result;
}
于 2013-07-13T00:05:29.877 回答