DependencyObject.Dispatcher プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
このオブジェクトが関連付けられている CoreDispatcher を取得します。 CoreDispatcher は、コードが UI 以外のスレッドによって開始された場合でも、UI スレッド上の DependencyObject にアクセスできる機能を表します。
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
プロパティ値
DependencyObject オブジェクトが関連付けられている CoreDispatcher。UI スレッドを表します。
例
この例では、Page の分離コード ファイルの暗黙的な This に対する Dispatcher の使用方法を示します。 この例では、ラムダ式を使用して DispatchedHandler 実装を追加します。 ハンドラー自体は、UI スレッドで実行されない Accelerometer.ReadingChanged イベントを処理しています。
private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
AccelerometerReading reading = e.Reading;
ScenarioOutput_X.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
ScenarioOutput_Y.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
ScenarioOutput_Z.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
});
}
注釈
Dispatcher プロパティは、RunAsync と待機可能な関数を使用して、UI 以外のスレッドからの呼び出しをマーシャリングするために使用できる CoreDispatcher 参照を提供します。 待機可能な関数の詳細については、「 C# または Visual Basic での非同期 API の呼び出し」を参照してください。 DependencyObject リファレンス トピックの「DependencyObject and threading」セクションも参照してください。
DependencyObject は UI スレッド上に作成する必要があり、UI スレッドとのアフィニティを持つ必要があります。 これはスレッド間の取得を可能にするエントリ ポイントであるため、DependencyObject.Dispatcher は DependencyObject の唯一のインスタンス API またはそのサブクラスであり、スレッド間例外をスローせずに UI 以外のスレッドからアクセスできます。 ワーカー スレッドまたはその他の UI 以外のスレッドから呼び出そうとすると、他のすべての DependencyObject API によって例外がスローされます。
具体的には、Dispatcher プロパティは、アプリ UI スレッドに関連付けられている CoreDispatcher を取得します。 CoreDispatcher の RunAsync メソッドを使用してコードを実行することは、そのオブジェクトが XAML ビジュアル ツリーまたは表示 UI (アプリ ウィンドウのビジュアル ルート) にまだ関連付けられていない場合でも、依存関係プロパティの値を照会または変更する場合に必要です。
Window.Dispatcher は、UI スレッドに関連付けられている CoreDispatcher も参照します。 Window.Dispatcher は基本的に CoreWindow.Dispatcher のラッパーに過ぎないため、 Window クラスに簡単にアクセスできます。
注意
ディスパッチャー値の接続は、デザイン時ビューでは使用できません。 これは、Dispatcher 値を使用するカスタム コントロールを作成し、そのコードが、コンストラクターや 読み込まれた ハンドラーなど、デザイン ビューで使用されるコード パスを介してデザイン時環境からアクセスされた場合に問題が発生する可能性があります。 カスタム コントロールを記述していて、この問題が発生した場合は、 DesignModeEnabled が true の場合にそのコードを呼び出さないなど、コードにガード条件付きを導入することを検討してください。