DependencyObject.Dispatcher 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
이 개체가 연결된 CoreDispatcher 를 가져옵니다. CoreDispatcher는 코드가 비 UI 스레드에서 시작되더라도 UI 스레드에서 DependencyObject에 액세스할 수 있는 기능을 나타냅니다.
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
속성 값
DependencyObject 개체가 연결된 CoreDispatcher이며, 이는 UI 스레드를 나타냅니다.
예제
이 예제에서는 페이지에 대한 코드 숨김 파일의 암시 적 디스패처 사용을 보여 줍니다. 이 예제에서는 람다 식을 사용하여 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 속성은 RunAsync 및 awaitable 함수를 사용하여 UI가 아닌 스레드에서 오는 호출을 마샬링하는 데 사용할 수 있는 CoreDispatcher 참조를 제공합니다. 대기 가능한 함수에 대한 자세한 내용은 C# 또는 Visual Basic에서 비동기 API 호출을 참조하세요. DependencyObject 참조 항목의 "DependencyObject 및 스레딩" 섹션도 참조하세요.
DependencyObject는 UI 스레드에서 만들어야 하며 UI 스레드에 대한 선호도를 가져야 합니다. 스레드를 건너갈 수 있는 진입점이므로 DependencyObject.Dispatcher는 DependencyObject의 유일한 instance API이거나 스레드 간 예외를 throw하지 않고 UI가 아닌 스레드에서 액세스할 수 있는 하위 클래스입니다. 다른 모든 DependencyObject API는 작업자 스레드 또는 다른 비 UI 스레드에서 호출하려고 하면 예외를 throw합니다.
특히 Dispatcher 속성은 앱 UI 스레드와 연결된 CoreDispatcher 를 가져옵니다. 해당 개체가 XAML 시각적 트리 또는 표시되는 UI(앱 창의 시각적 루트)와 아직 연결되지 않은 경우에도 종속성 속성의 값을 쿼리하거나 변경하려는 경우 CoreDispatcher의 RunAsync 메서드를 통해 코드를 실행해야 합니다.
Window.Dispatcher 는 UI 스레드와 연결된 CoreDispatcher 도 참조합니다. Window.Dispatcher 는 기본적으로 CoreWindow.Dispatcher 주위에 있는 래퍼이므로 Window 클래스가 쉽게 액세스할 수 있습니다.
참고
디스패처 값에 대한 연결은 디자인 타임 보기에서 사용할 수 없습니다. 디스패처 값을 사용하는 사용자 지정 컨트롤을 만들고 디자인 뷰에서 사용하는 코드 경로(예: 생성자 및 로드된 처리기)를 통해 디자인 타임 환경에서 해당 코드에 액세스하는 경우 이 문제가 발생할 수 있습니다. 사용자 지정 컨트롤을 작성하고 이 문제가 발생하는 경우 DesignModeEnabled 가 true일 때 해당 코드를 호출하지 않는 등의 가드 조건부를 코드에 도입하는 것이 좋습니다.