.NET Update WPF Control在自己的专用UI线程上

时间:2010-09-27 05:13:36

标签: multithreading wpf-controls refresh ui-thread dedicated

我有一个实时应用程序,它以ListView控件的形式不断更新UI日志(RichTextBox控件)。使用通过事件接收的当前应用程序数据更新控件。我的应用程序运行速度非常慢,我发现它是由于ListView日志正在更新,这会阻止UI线程。可以想象,应用程序似乎对用户反应迟钝。

我知道可以在它自己的专用UI线程上启动WPF窗口。我想知道是否可以在它自己的UI线程上托管WPF控件,以便主UI线程更新窗口的其余部分而不被阻止?

如果无法做到这一点,请推荐替代方法以解决这一难题。

谢谢!

2 个答案:

答案 0 :(得分:0)

您尚未发布任何代码,但为什么不将ListView绑定到ObservableCollection?您更新了集合,它会引发一个事件,告诉UI它已被更改 - 这就是更新UI。

有很多关于如何做到这一点的教程 - 可以在Switch On The Code上找到一个

答案 1 :(得分:0)

RichTextBox是定期更新的昂贵控件。

无法在自己的UI线程上托管WPF控件。

ObservableCollection在我的情况下不起作用,因为我无法直接访问我绑定的对象 - 第三方对象。

我的解决方案需要进行少量更改,它是基于ListView的UI Log控件。 ListView已针对批量和定期更新进行了优化 - 得益于VirtualisedStackPanel标记。