【问题标题】:update the UI from a separate thread in wp8 app从 wp8 应用程序中的单独线程更新 UI
【发布时间】:2013-07-11 16:46:04
【问题描述】:

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

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

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

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

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

有人可以帮帮我吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        相关资源
        最近更新 更多