0

http://msdn.microsoft.com/en-us/library/ms752286(v=vs.110).aspxに従って、AddPropertyChangedEventHandler を使用してウィンドウ イベントをサブスクライブしています。

ただし、ターゲット ウィンドウがハングまたはフリーズすると (残念ながら、これはかなり定期的に発生する可能性があります)、アプリケーション全体もハングします。

この問題を克服する最善の方法は何ですか?

(C#、.NET 4.5、WPF)

4

1 に答える 1

2

見る:

STA スレッドからイベント ハンドラーをインストールしようとすると、UIA が STA スレッドにコールバックして新しいイベント ハンドラーを通知しようとするため、デッドロックが発生する傾向があります。

それによると、別のスレッド (つまり、UI スレッドではない) でイベントにサブスクライブする必要があると思います....それは、COM MTA (マルチスレッド アパートメント) スレッド モデルを使用するように初期化されている必要があります... .むしろ、UI の STA スレッドで実行します。

次にInvoke、バックグラウンド MTA スレッドでイベントを取得したら、UI スレッドに戻ります (デッドロックの可能性を回避するために、UI スレッドでデリゲートにコールバックするのBeginInvokeではなく、使用することをお勧めします)。Invoke

于 2014-01-13T11:07:37.943 に答える