ディスパッチャーを使用して UI スレッドで呼び出しを呼び出そうとすると、WPF アプリケーションが「ハング」したり、Wait 呼び出しでスタックしたりするように見える、やや複雑な WPF アプリケーションがあります。
一般的なプロセスは次のとおりです。
- ボタンのクリック イベントを処理する
- プレゼンターと UI の新しいインスタンスを作成し、Disconnectメソッドを呼び出す新しいスレッド (STA) を作成します。
- 切断してから、名前という名前の UI のプロパティを設定します
- Name のセッターは、次のコードを使用してプロパティを設定します。
if(this.Dispatcher.Thread != Thread.CurrentThread)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
this.Name = value; // Call same setter, but on the UI thread
});
return;
}
SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.
私の問題は、ディスパッチャーの呼び出しメソッドが呼び出されると、毎回ハングしているように見え、呼び出しスタックは、呼び出し実装内でスリープ、待機、または参加していることを示していることです。
それで、私が間違っていること、明らかであるかどうか、またはこのプロパティ(およびその他)を設定するためにUIスレッドを呼び出すより良い方法がありますか?
編集:解決策は、スレッド デリゲートの最後 (たとえば、作業が実行されていた場所) で System.Windows.Threading.Dispatcher.Run() を呼び出すことでした - 助けてくれたすべての人に感謝します。