从wp8 app中的单独线程更新UI

时间:2013-07-11 16:46:04

标签: c# multithreading user-interface windows-phone-8

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

现在我有一个单独的线程,其工作是与azure服务交互获取数据,并在主UI线程执行其他操作时使用数据更新UI。

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

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

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

  3. 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

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