c# - 进行大量 PropertyUpdates 时避免 UI 锁定

标签 c# wpf multithreading performance dispatcher

当您同时对 UI 进行大量更新时,我正在尝试发现避免 UI-Lockups 的最佳方法。

基本前提是,在启动时,我的工具会在后台工作程序中运行 perforce FSTAT。这会生成一个非常大的文件列表及其信息。完成后,我会在其 RunWorkerCompleted 函数中将此信息传播到 TreeView 内的 UI。

然而,这涉及大量属性更新!取决于它传播到的文件数量。它可以是 5000 多个文件。这会完全锁定 UI 大约 3-5 秒。

我想知道我是否可以异步更新 UI,就像我说的那样,一次传播 10-20 个文件并且仍然让 UI 线程继续更新以使其仍然响应。

谢谢。

最佳答案

如果您使用属性绑定(bind)更新 TreeView 内部的信息,您可以将 Binding.IsAsync 标志设置为 true。如果您不使用绑定(bind)更新值,那么这可能是需要研究的问题。

Binding.IsAsync Property

另一种选择是更新所有属性,但不调用属性的 PropertyChanged 事件(假设您正在使用 INotifyPropertyChanged 更新绑定(bind))直到所有数据都已更改,然后调用 PropertyChanged 事件您在任务上的每个属性,它仍然是异步的,但即使有 5000 多个绑定(bind)更新,它也不应该花费 3-5 秒。

关于c# - 进行大量 PropertyUpdates 时避免 UI 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080167/

相关文章:

c# - 在 C# 中比较 3 个数组长度的好方法?

c# - WPF:单击按钮打开新窗口

java - 如何防止我的 UDP keepalive 使用 100% CPU?

java - 阻塞行为 - Java 并发数据结构

c++ - QT 鼠标移动事件是否在单独的线程中?以及如何解决与此相关的绘画应用程序问题

c# - 如何在运行时在 wpf 中调整用户控件的大小

c# - Azure:MissingRegistrationForLocation:未在位置 'XXXX' 中为资源类型 'YYYY' 注册订阅

c# - 单元测试资源管理器不显示 metro 应用程序的异步单元测试

c# - RichTextBox 垂直显示文本

c# - 使用 Telerik 组件正确部署应用程序