DependencyObject.CheckAccess 메서드

2013-12-13

호출 스레드에서 이 개체에 액세스할 수 있는지 여부를 확인합니다.

Namespace:  System.Windows
어셈블리:  System.Windows(System.Windows.dll)

public bool CheckAccess()

반환 값

형식: System.Boolean
호출 스레드에서 이 개체에 액세스할 수 있으면 true이고, 그렇지 않으면 false입니다.

CheckAccessDependencyObject를 얻은 스레딩 컨텍스트가 DependencyObject를 만들고 있던 스레드와 같은지 여부를 결정하는 유틸리티 메서드입니다.

  • 같은 스레드인 경우 CheckAccesstrue를 반환합니다. 해당 DependencyObject에 대한 작업을 수행할 수 있습니다. 여기에는 속성 설정, 메서드 호출 등을 포함할 수 있습니다.

  • 현재 스레딩 컨텍스트가 만들고 있는 스레드가 아닌 경우 CheckAccessfalse를 반환합니다. DependencyObject에서 값을 변경하려고 작업을 수행하는 거의 모든 시도에서 이 예외가 발생합니다. 그러나 해당 DependencyObject에서 Dispatcher 값을 검색하고 Dispatcher API를 사용하여 작업을 호출할 수 있습니다. 자세한 내용은 Dispatcher를 참조하세요.

모든 스레드는 특정 DependencyObject에 액세스할 수 있는지 여부를 확인할 수 있습니다.

CheckAccessfalse를 반환하는 경우 일반적으로 주 UI 스레드가 아닌 스레드 컨텍스트에서 주 UI 스레드의 DependencyObject에 액세스를 시도하고 있다는 의미입니다.

BackgroundWorker는 주 UI 스레드를 사용하지 않는 작업을 수행하는 스레드를 위임할 수 있는 옵션입니다.

다음 코드 예제에서는 이 메서드를 사용하여 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.");
}


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시:
© 2014 Microsoft