我正在开发基于插件的 WPF 应用程序。插件使用多个线程并行加载。其中一个插件是使用 WPF RibbonWindow 的 UI 插件。我正在尝试将插件 A 中的 RibbonTab 添加到 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();
如果您需要任何其他信息,请告诉我。
谢谢。