使用Dispatcher.Invoke来更新UI时很麻烦
||
我正在研究基于插件的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();
如果您需要任何其他信息,请告诉我。
谢谢。
没有找到相关结果
已邀请:
2 个回复
藕挝
而不是创建一个新线程。无论如何,在这种情况下,我通常通过插件界面将主窗口中的ѭ2传递给插件,而不是直接访问ѭ3。使它更具封装性,并且您可以在单元测试中更好地控制它。
味芯憨