ワーカースレッドからUIスレッドを呼び出すことは多くの場合、Invoke()の代わりにBeginInvoke()を使用する理由がわかっています。私は最近this questionを投稿し、いくつかの調査をした後、UIスレッド上で何かを(非同期に)呼び出すために少なくとも3つの異なる方法(内部的には同じかもしれない)があることが分かった。control.BeginInvoke()対ディスパッチャー対SynchronizationContext Vs .. - 信頼性
Control.BeginInvoke()
Dispatcher.BeginInvoke(priority..)
を使用してSynchronizatoinContext
クラス
コンテキスト:
我々はsomeControl.BeginInvoke()
を使用しますが、時々(残念ながら唯一のエンドユーザーの生産環境における)BeginInvoke is
に渡されたデリゲートは、私はそれが作成し、ポストメッセージが迷子にされていることを信じていますこれは実行されないことに気づいています。私たちはUIスレッドに信頼できる方法で通信する必要があります。 control.Invoke()
はUIをハングアップすることもあるので、そこに行きたくはありません。
でBeginInvokeメソッドの醜さを置くことができます。 – SLaks
私は同様の問題を抱えています...万が一問題を解決できましたか? –
ここと同じですか? – Pedro77