2010-09-24 59 views
0

這可能會成爲一個完整的問題,因爲我對PRISM知之甚少,但讓我們假設我有一個複合應用程序的假設情況由3個控件組成:控件A(圖表),控件B(表格)和控件C(一個計算器)。Prism中的各個模塊/視圖如何運行(WPF的複合應用程序模式)

所有這些控件是否在同一UI線程上運行?例如,如果控制A開始對其主線程進行一些瘋狂的計算並且被阻塞 - 整個容器是否會凍結?

如果這個問題的答案是肯定的 - 就是告訴「控制小組」的,以不這樣做的唯一的解決辦法?還是有一些我們可以考慮處理的設計模式?

如果這個問題的答案是否定的 - 你能解釋一下這是如何工作或在一些文件,我可以審查對象指向我?

感謝

回答

3

WPF使用一個調度線程UI同步訪問,所以是essentually他們都將在同一線程上運行。您仍然可以實現通常的方式異步調用,而是要更新UI,你需要使用分派重返發送器線程:

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