这可能完全是n00b问题,因为我对PRISM一点都知之甚少,但让我们假设我有一个由3个控件组成的复合应用程序的假设情况:Control A(图表),Control B(表格)和控制C(计算器)。
所有这些控件都在同一个UI线程上运行吗?例如,如果Control A开始在它的主线程上做一些疯狂的计算并且阻塞 - 整个容器会冻结吗?
如果这个问题的答案是肯定的 - 是告诉“控制团队”A不要这样做的唯一解决方案吗?或者是否有一些我们可以考虑处理它的设计模式?
如果这个问题的答案是否定的 - 你能解释一下这是如何运作的,或者指出一些文件,我可以就这个问题进行评论吗?
由于
答案 0 :(得分:3)
WPF使用Dispatcher线程来同步UI访问,所以是的,他们都会在同一个线程上运行。您仍然可以通常的方式实现异步调用,但是为了更新UI,您需要使用Dispatcher重新加入Dispatcher线程:
if (!Dispatcher.CheckAccess())
Dispatcher.Invoke(new Action(() => item.Items.Add(subitem)));
else
item.Items.Add(subitem);
使用EventAggregator订阅事件时,您也可以执行此操作,如下所示:
eventAggregator.GetEvent<AnEvent>().Subscribe(DoWork, ThreadOption.UIThread);
这里有关于这个主题的更多信息:
http://msdn.microsoft.com/en-us/library/ms741870.aspx#threading_overview