日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。XAMLコントロールの使い方ばかりを書くのも飽きてきたので趣向を変えていきます。DispatcherObjectWPFでは、他のUIフレームワークと同様にUIを操作するには専用のスレッドから操作をする必要があります。WPFでは、この操作を簡単にするためにDispatcherという仕組みを提供しています。WPFの継承階層を上へ上へたどっていくとDispatcherObjectというクラスに必ず当たります。このクラスにはDispatcherというプロパティが定義されていて、このオブジェクトが生成されたスレッドから操作されているかをチェックする仕組みや、オブジェクトが生成されたスレッドで処理のキューイングを行う仕組みを提供しています。DispatcherObjectで提供される主な機能を以下に示します。DispatcherObjectに紐づけられたスレッドに対応するDispatcherオブジェクトを取得します。現在のスレッドがDispatcherObjectに紐づけられたスレッドかどうかチェックします。チェックの結果異なるスレッドの場合InvalidOperationExceptionの例外をスローします。現在のスレッドがDispatcherObjectに紐づけられたスレッドかどうかチェックします。チェックの結果異なるスレッドの場合falseを返します。これらの機能の使い方についてのサンプルプログラムを以下に示します。DispatcherObjectは抽象クラスなので、継承してメソッドを1つもつクラスを作成しました。メソッド内では、VerifyAccessメソッドを使って有効なスレッドからのアクセスかどうかを確認して、デバッグウィンドウへメッセージを出力しています。}}Windowに3つのボタンを置いて、UIスレッドからの直接呼出し、UIスレッド以外からの呼び出し、UIスレッド以外からDispatcher経由での呼び出しの3パターンの呼び出しを確認します。});}実行して上から順番にボタンを押した結果のデバッグウィンドウを以下に示します。このオブジェクトは別のスレッドに所有されているため、呼び出しスレッドはこのオブジェクトにアクセスできません。...省略...DoSomething最初のボタンでは、UIスレッドからの呼び出しなので、エラーもなくデバッグウィンドウに結果が出ています。二番目のボタンでは、UIスレッド以外からの呼び出しでVerifyAccessの箇所でInvalidOperationExceptionが発生しています。三番目のボタンでは、UIスレッド以外からDispatcher経由で、呼び出しているためデバッグウィンドウに結果が出ていることが確認できます。通常のWPFを使った開発でも、UIスレッド以外からUIを直接または間接的に操作することがあります。そんなときは、このDispatcherを使い今回のサンプルプログラムのように呼び出す必要があります。「リソース」ここでは、リソースについて説明します。C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。Blogの内容は個人の見解であり、所属する企業を代表するものではありません。)はてなブログをはじめよう!okazukiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。