【问题标题】:wpf Updating UI dynamically without freezing UIwpf 动态更新 UI 而不会冻结 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 工作。

标签: c# wpf multithreading user-interface mvvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多