12

Can somebody tell me when to use a Dispatcher and when to use the SynchronizationContext class?

For a while now I have been using the Dispatcher to queue up tasks from a background thread, then I discovered the SynchronizationContext.

4

2 に答える 2

17

私の知る限り、WPFを使用する場合、オブジェクトは実際には Dispatcher オブジェクトの単なるラッパーであるSynchronizationContext.Currentタイプであり、 andメソッドはandにデリゲートするだけです。DispatcherSynchronizationContextPostSendDispatcher.BeginInvokeDispatcher.Invoke

だから、使うことにしたとしても、SynchronizationContext裏でディスパッチャを呼んでしまうと思います。

また、UI を呼び出す必要があるすべてのスレッドに現在のコンテキストへの参照を渡す必要があるため、SynchronizationContext を使用するのは少し面倒だと思います。

于 2010-06-18T15:37:59.827 に答える
4
  1. コードが WPF と密結合している場合は、Dispatcher を使用します。

  2. 「Context」スレッドで何かをキューに入れる必要がある場合は、AsyncOperationManager を使用します。これは、Windows フォーム、ASP .NET、および WCF アプリケーションでも機能します。

  3. SynchronizationContext を自分で使用することは避けてください。AsyncOperationManager は、このメカニズムを内部で使用します。

于 2010-06-18T16:25:27.620 に答える