この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

DependencyObject.CheckAccess メソッド

Silverlight

呼び出し元のスレッドがこのオブジェクトにアクセスできるかどうかを確認します。

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

[EditorBrowsableAttribute(EditorBrowsableState.Never)]
public bool CheckAccess()

戻り値

型 : System.Boolean
呼び出し元のスレッドがこのオブジェクトにアクセスできる場合は true。それ以外の場合は false

CheckAccess は、DependencyObject を取得したスレッドのコンテキストが、DependencyObject が作成されたスレッドと同じであるかどうかを判断するユーティリティ メソッドです。

  • 同じスレッドである場合は、CheckAccesstrue を返します。 その DependencyObject でアクションを実行できます。 これには、プロパティの設定やメソッドの呼び出しなどが含まれる場合があります。

  • 現在のスレッド コンテキストが、作成元のスレッドでない場合は、CheckAccessfalse を返します。 DependencyObject の値を変更しようとする操作を実行すると、ほとんどの場合、この状況で例外が発生します。 ただし、その DependencyObject から Dispatcher 値を取得でき、Dispatcher API を使用して動作を呼び出します。 詳細については、「Dispatcher」および「マネージ スレッド処理の概要」を参照してください。

任意のスレッドを調べて、そのスレッドが特定の DependencyObject にアクセスできるかどうかを確認できます。

CheckAccess falseを返した場合は、通常、メイン UI スレッドの DependencyObject に、メイン UI スレッドではないスレッドのコンテキストからアクセスしようとしていることを意味します。

BackgroundWorker は、メイン UI スレッドを使用していない操作を実行するスレッドを委任するための手段の 1 つです。

このメソッドを使用して、UI スレッド上で DependencyObject に対する操作を実行できるかどうかをチェックする方法を表すコード例を次に示します。この例では、CheckAccessfalse を返す場合に BeginInvoke を使用します。


private delegate void AddTextDelegate(Panel p, String text);

private void AddText(Panel p, String text)
{
    p.Children.Clear();
    p.Children.Add(new TextBlock { Text = text });
}

private void TestBeginInvokeWithParameters(Panel p)
{
    if (p.Dispatcher.CheckAccess()) AddText(p, "Added directly.");
    else p.Dispatcher.BeginInvoke(
        new AddTextDelegate(AddText), p, "Added by Dispatcher.");
}


Silverlight

サポート対象 : 5、4、3

Silverlight for Windows Phone

サポート対象 : Windows Phone OS 7.1、Windows Phone OS 7.0

Silverlight でサポートされるオペレーティング システムの詳細については、「サポートされているオペレーティング システムとブラウザー」を参照してください。

コミュニティの追加

追加
表示: