各个模块/视图在Prism中的行为(WPF的复合应用程序模式)

时间:2010-09-24 19:47:39

标签: c# prism composite

这可能完全是n00b问题,因为我对PRISM一点都知之甚少,但让我们假设我有一个由3个控件组成的复合应用程序的假设情况:Control A(图表),Control B(表格)和控制C(计算器)。

所有这些控件都在同一个UI线程上运行吗?例如,如果Control A开始在它的主线程上做一些疯狂的计算并且阻塞 - 整个容器会冻结吗?

如果这个问题的答案是肯定的 - 是告诉“控制团队”A不要这样做的唯一解决方案吗?或者是否有一些我们可以考虑处理它的设计模式?

如果这个问题的答案是否定的 - 你能解释一下这是如何运作的,或者指出一些文件,我可以就这个问题进行评论吗?

由于

1 个答案:

答案 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