このドキュメントはアーカイブされており、メンテナンスされていません。

Dispatcher クラス

スレッドの作業項目のキューを管理するためのサービスを提供します。このクラスは継承できません。

名前空間: System.Windows.Threading
アセンブリ: WindowsBase (windowsbase.dll 内)

public sealed class Dispatcher
public final class Dispatcher
public final class Dispatcher
このマネージ クラスは XAML では使用できません。

Dispatcher は、特定のスレッドの作業項目の優先順位付きのキューを維持します。

スレッドで作成された Dispatcher は、そのスレッドに関連付けることができる唯一の Dispatcher になります。これは、その Dispatcher がシャットダウンされた場合でも当てはまります。

現在のスレッドの CurrentDispatcher を取得しようとしたときに Dispatcher がそのスレッドに関連付けられていなかった場合は、Dispatcher が作成されます。

Dispatcher は、シャットダウンされると再開できません。

WPF では、DispatcherObject にアクセスできるのは、関連付けられている Dispatcher だけです。たとえば、バックグラウンド スレッドは、UI スレッドの Dispatcher に関連付けられている Button の内容を更新することはできません。バックグラウンド スレッドが ButtonContent プロパティにアクセスするには、UI スレッドに関連付けられた Dispatcher に操作をデリゲートする必要があります。これは、Invoke または BeginInvoke を使用して行います。Invoke は同期処理で、BeginInvoke は非同期処理です。操作は、指定した DispatcherPriority で、Dispatcher のキューに追加されます。

シャットダウンした DispatcherBeginInvoke を呼び出すと、返された DispatcherOperation のステータス プロパティが Aborted に設定されます。

DisableProcessing を除く Dispatcher のすべてのメソッドはフリースレッドです。

DispatcherObject から派生するオブジェクトには、スレッドの関係があります。

Freezable から派生するオブジェクトを固定すると、フリースレッドになります。詳細については、「Freezable オブジェクトの概要」を参照してください。

Dispatcher に操作を渡す方法を次の例に示します。この例の完全なソース コードについては、「計算を長時間実行するシングル スレッド アプリケーションのサンプル」を参照してください。

まず、引数を受け入れないデリゲートを作成します。

public delegate void NextPrimeDelegate();

次に、BeginInvoke を呼び出します。この BeginInvoke の呼び出しでは、優先順位 (Normal に設定される) とコールバック (デリゲート nextPrimeDelegate のインスタンスから渡される) の 2 つのパラメータが指定されます。

startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));

System.Object
  System.Windows.Threading.Dispatcher

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

.NET Framework

サポート対象 : 3.0
表示: