【问题标题】:UWP update UI control from a task running in a different threadUWP 从在不同线程中运行的任务更新 UI 控件
【发布时间】:2019-12-28 11:13:55
【问题描述】:

UI 有一个名为 lblMyLabel 的标签。 它绑定到视图模型 MyViewModel。

一个任务正在另一个线程上运行,该线程从服务中提取消息。(例如)

当这个任务收到一个特定的值时,它应该用它来更新 UI 标签。

我总是得到一个错误,它是在不同的线程中编组的。

【问题讨论】:

    标签: multithreading uwp


    【解决方案1】:

    当你想更新 UI 时,你应该在 UI 的调度线程上运行。你可以调用 Dispatcher.RunAsync 回到 UI 的调度线程。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //Start a Task
        Task t = Task.Factory.StartNew(() => {
            int i = 0;
            for (i = 0; i <= 1000; i++)
            { 
            }
            //Back onto the UI thread
            var a = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                //Update UI
                MyTextBlock.Text = "Update";
            });
        });
    }
    

    【讨论】:

    • 感谢 Faywang 的回复。我是 UWP 的新手。您是否可以提供调度程序的完整示例。
    • 您可以参考此document 了解更多信息。我已经更新了我的答案。当我想更新文本块时,我启动了一个任务并返回到 UI 线程。
    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 2014-10-14
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多