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?