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

C# 单个模块/视图在Prism中的行为(WPF的复合应用程序模式),c#,prism,composite,C#,Prism,Composite,这可能完全是一个n00b问题,因为我对PRISM知之甚少,但让我们假设我有一个由3个控件组成的复合应用程序的假设情况:控件a(图表)、控件B(表格)和控件C(计算器) 所有这些控件是否都在同一UI线程上运行?例如,如果一个控件开始在它的主线程上进行一些疯狂的计算,并且被阻塞,那么整个容器会冻结吗 如果这个问题的答案是肯定的,那么唯一的解决办法是告诉“控制团队”不要这样做吗?或者我们可以考虑一些设计模式来处理它吗 如果这个问题的答案是否定的-你能解释一下这是如何工作的,或者告诉我一些我可以复习的文

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

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

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

如果这个问题的答案是否定的-你能解释一下这是如何工作的,或者告诉我一些我可以复习的文档吗


谢谢,WPF使用一个调度程序线程来同步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);

eventAggregator.GetEvent

WPF使用一个调度程序线程来同步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);
eventAggregator.GetEvent