在對象的構造函數我需要創建一個WPF的MediaElement對象:獲得正確的WPF調度員在一個線程
m_videoMedia = new MediaElement();
但是類也可以從其他線程實例化,所以我需要使用
Dispatcher.Invoke(DispatcherPriority.Normal,
(Action)(() => { m_videoMedia = new MediaElement(); }));
但我怎麼能得到在該構造正確的調度實例:■
在對象的構造函數我需要創建一個WPF的MediaElement對象:獲得正確的WPF調度員在一個線程
m_videoMedia = new MediaElement();
但是類也可以從其他線程實例化,所以我需要使用
Dispatcher.Invoke(DispatcherPriority.Normal,
(Action)(() => { m_videoMedia = new MediaElement(); }));
但我怎麼能得到在該構造正確的調度實例:■
你最有可能可以只使用Dispatcher.CurrentDispatcher .Invoke ...
但是,如果由於某種原因無法正常工作,您可以讓您的類接收對分派器的引用作爲其構造函數的一部分。只需在施工時從UI線程傳入Dispatcher.CurrentDispatcher
即可。
大多數WPF控件派生自DispatcherObject,它具有您需要的Dispatcher屬性。所以基本上你可以使用你想使用的控件的調度器。在這種情況下,例如,MediaElement添加到的窗口。
如果您將對System.Windows.Forms
的引用添加到您的項目中,則可以繼續在WPF中使用Application.DoEvents()
。
您可以從靜態應用程序實例搶UI接線員:
Application.Current.Dispatcher
您可能要檢查
Application.Current
爲空第一,因爲它可以 一個關斷期間被清除。
另外,here are the docs爲Application類。
根據msdn,這將返回與當前線程關聯的調度程序,並將創建一個尚未創建的調度程序。這聽起來不像你想在這種情況下做的事情。您需要與UI關聯的調度程序。或者更具體地說,是特定窗口的調度程序。 – 2010-03-17 20:44:21
用於傳遞對當前調度程序的引用。 – Nate 2010-03-18 14:34:59
在類似的情況下,靜態Dispatcher.CurrentDispatcher不適用於我。按照sinelaw的建議,我嘗試了Application.Current.Dispatcher - 這工作。 – 2013-12-29 19:38:19