工作线程需要访问UI

时间:2014-05-11 20:18:14

标签: c++ multithreading

我使用Visual Studio 2013并使用C ++ / Xaml编程。我有一个工作线程从UI线程中分离出来进行一些计算。我需要这个工作线程能够在用户界面上访问诸如TextBox或ProgressBar之类的组件来执行诸如通知用户其进度之类的事情。经过一些研究,这显然比我预期的要难得多。

1 个答案:

答案 0 :(得分:0)

您可能认为工作线程需要访问UI,但您应该重新考虑这个想法,这是一个糟糕的方法。您已经发现比预期更难 - 将此视为您可能走错轨道的指标。

更好的方法是使用间接,即在有新数据可供显示时发布消息,引发事件或发出标记信号。 UI线程处理这个问题,并在适当的时候做他需要做的任何事情。

这样,您可以为将来的改进留出空间,例如:您可能希望通过其他版本(进度条而不是百分比标签)替换图形用户界面或稍后完全不同的用户界面(想想基于网络的,想想没有自己的用户界面的服务等)。

让工作线程访问控件会直接将后台工作者代码与具体UI紧密联系在一起,这只不过是一个没有增益 1)的任意限制。通过使用间接(这可能是一个正确同步的视图模型),您可以防止这种情况,从而使后续更改成为一种快照。


1 谁说YAGNI?你现在已经需要了它!