DependencyObject.CheckAccess メソッド

2013/12/12

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

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)

'宣言
Public Function CheckAccess As Boolean

戻り値

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

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

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

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

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

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

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

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


Private Delegate Sub AddTextDelegate(ByVal p As Panel, ByVal text As String)

Private Sub AddText(ByVal p As Panel, ByVal text As String)
    p.Children.Clear()
    Dim t As New TextBlock
    t.Text = text
    p.Children.Add(t)
End Sub

Private Sub TestBeginInvokeWithParameters(ByVal p As Panel)
    If p.Dispatcher.CheckAccess() _
        Then AddText(p, "Added directly.") _
        Else p.Dispatcher.BeginInvoke(New AddTextDelegate( _
            AddressOf AddText), p, "Added by Dispatcher.")
End Sub


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2015 Microsoft