wpf 动态更新 UI 而不会冻结 UI

Posted

技术标签:

【中文标题】wpf 动态更新 UI 而不会冻结 UI【英文标题】:wpf Updating UI dynamically without freezing UI 【发布时间】:2018-12-22 11:01:23 【问题描述】:

代码正在生成选定目录的可视化树。但由于这可能需要很长时间,我需要在后台线程中执行此操作并且不要冻结 UI。 问题是当我创建 UI 元素时,它不允许我在主 UI 线程之外进行。

        BackgroundWorker doMacBk;
        doMacBk = new BackgroundWorker();
        doMacBk.DoWork += (o, arg) =>
        
                Application.Current.Dispatcher.Invoke(new Action(() =>
                
                    //Making UI elements
                ));
            
        ;

如何在不冻结 UI 的情况下执行此操作?

【问题讨论】:

将 WPF 的强大功能与绑定、数据模板和虚拟化结合使用 不要在代码后面创建 UI 元素。后台处理请看Asynchronous Programming with Async and Await。 使用后台工作程序然后立即调用调度程序没有什么意义。后台工作者的重点是做繁重的非 UI 工作。 【参考方案1】:

您可以在后台线程中执行所有操作,最后只需使用 Application.Current.Dispatcher 将控件添加到 UI 树。

【讨论】:

以上是关于wpf 动态更新 UI 而不会冻结 UI的主要内容,如果未能解决你的问题,请参考以下文章

如何在不冻结 UI 的情况下使用 QProcess 循环的输出更新 UI?

动态更新 UITableView 部分标题

Swift 3- 从主线程更新 UI

动态更新UI的方式

没有 ui 冻结的 Task.Factory.StartNew 延迟

anroid动态更新UI界面