我正在研究基於插件的WPF應用程序。插件使用多個線程並行加載。其中一個插件是使用WPF RibbonWindow的UI插件。我正在嘗試將插件A中的RibbonTab添加到UI插件中。無法使用Dispatcher.Invoke更新UI
由於調用線程不擁有RibbonWindow,因此我在RibbonWindow上使用Dispatcher.Invoke。不幸的是,委託內部的代碼永遠不會被調用。該應用程序仍然響應,但該選項卡沒有被添加。
無論如何,我可以從另一個插件訪問UI線程? 我可以通過我的應用程序擁有一個可以保持活動的線程,對於我使用該線程來操作RibbonWindow?
System.Threading.ThreadStart start = delegate()
{
log.Debug(Thread.CurrentThread.ManagedThreadId);
if (!this.Dispatcher.CheckAccess())
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate() {
log.Debug(Thread.CurrentThread.ManagedThreadId);
ribbonRoot.Items.Add(myRibbonTab);
});
}
else {
log.Debug("We have access add directly.");
}
};
new Thread(start).Start();
如果您需要任何其他信息,請讓我知道。
謝謝。
感謝您的回覆。現在我得到一個'System.Reflection.TargetInvocationException:異常已被調用的目標拋出。 ---> System.InvalidOperationException:調用線程無法訪問此對象,因爲不同的線程擁有它。我嘗試使用調度程序創建ribbonwindow,並使應用程序無響應。請指教。 – user26242 2011-04-13 14:06:46
我不得不使用Application.Current.Dispatcher創建每個ribbontab並解決了我的問題。謝謝您的幫助。 – user26242 2011-04-13 20:03:49