DependencyObject.Dispatcher 속성

정의

이 개체가 CoreDispatcher 연결된 개체를 가져옵니다. 코드 CoreDispatcher 가 비 UI 스레드에서 시작되는 경우에도 UI 스레드에 액세스할 DependencyObject 수 있는 기능을 나타냅니다.

UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.DependencyObject.Dispatcher(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조).

public:
 property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher

속성 값

CoreDispatcher

CoreDispatcher 해당 DependencyObject 개체는 UI 스레드를 나타내는 연결된 개체입니다.

예제

이 예제에서는 코드 숨김 파일의 암시 적 디스패처 사용을 보여 줍니다 Page. 이 예제에서는 람다 식을 사용하여 구현을 추가합니다 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 속성은 UI가 아닌 스레드에서 오는 호출을 마샬링하고 대기 가능한 함수를 사용하는 RunAsync 데 사용할 수 있는 참조를 제공합니다CoreDispatcher. 대기 가능한 함수에 대한 자세한 내용은 C# 또는 Visual Basic 비동기 API 호출을 참조하세요. 참조 항목의 DependencyObject "DependencyObject 및 스레딩" 섹션도 참조하세요.

A DependencyObject 는 UI 스레드에서 만들어야 하며 UI 스레드에 대한 선호도가 있어야 합니다. 스레드 간 가져오기를 가능하게 하는 진입점이므로 DependencyObject.Dispatcher는 스레드 간 예외를 throw하지 않고 UI가 아닌 스레드에서 액세스할 수 있는 유일한 인스턴스 API DependencyObject 또는 해당 서브클래스의 인스턴스입니다. 다른 DependencyObject 모든 API는 작업자 스레드 또는 다른 비 UI 스레드에서 호출하려고 하면 예외를 throw합니다.

특히 Dispatcher 속성은 앱 UI 스레드와 연결된 속성을 가져옵니다 CoreDispatcher . 해당 개체가 아직 XAML 시각적 트리 또는 표시되는 UI(앱 창의 시각적 루트)와 연결되지 않은 경우에도 종속성 속성의 값을 쿼리하거나 변경하려는 경우 메서드를 통해 RunAsync CoreDispatcher 코드를 실행하는 것이 필요합니다.

Window.Dispatcher also references a CoreDispatcher that is associated with the UI thread. Window.Dispatcher 는 기본적으로 래퍼 CoreWindow.Dispatcher 에 불과하므로 클래스가 Window 쉽게 액세스할 수 있습니다.

참고

디스패처 값에 대한 연결은 디자인 타임 보기에서 사용할 수 없습니다. 이렇게 하면 디스패처 값을 사용하는 사용자 지정 컨트롤을 만들었으며 디자인 뷰에서 사용하는 코드 경로(예: 생성자 및 Loaded 처리기)를 통해 디자인 타임 환경에서 해당 코드에 액세스하는 경우 문제가 발생할 수 있습니다. 사용자 지정 컨트롤을 작성하고 이 문제가 발생하는 경우 코드 에 true일 때 DesignModeEnabled 해당 코드를 호출하지 않는 것과 같은 보호 조건부를 도입하는 것이 좋습니다.

적용 대상