私はプラグインベースのWPFアプリケーションに取り組んでいます。プラグインは、複数のスレッドを使用して並列にロードされます。プラグインの1つは、WPFリボンウィンドウを使用するUIプラグインです。プラグインAからUIプラグインにRibbonTabを追加しようとしています。
呼び出し元のスレッドはRibbonWindowを所有していないため、RibbonWindowでDispatcher.Invokeを使用しています。残念ながら、デリゲート内のコードが呼び出されることはありません。アプリケーションは引き続き応答しますが、タブは追加されていません。
とにかく、別のプラグインからUIスレッドにアクセスできますか?リボンウィンドウでの操作にそのスレッドを使用するために、アプリケーション全体で存続できるスレッドを作成できますか?
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();
追加情報が必要な場合はお知らせください。
ありがとう。