DependencyObject.Dispatcher 屬性

定義

取得與此物件相關聯的 CoreDispatcherCoreDispatcher代表可以存取 UI 執行緒上DependencyObject的功能,即使程式碼是由非 UI 執行緒起始也一樣。

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 執行緒。

範例

此範例顯示分派器針對Page的隱含一個程式碼後置檔案使用。 此範例會使用 Lambda 運算式來新增 DispatchedHandler 實作。 處理常式本身正在處理 Accelerometer.ReadingChanged 事件,該事件不會在 UI 執行緒上執行。

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 屬性提供 CoreDispatcher 參考,可用來封送處理來自非 UI 執行緒的呼叫,使用 RunAsync 和可等候的函式。 如需可等候函式的詳細資訊,請參閱 在 C# 或 Visual Basic 中呼叫非同步 API。 See also "DependencyObject and threading" section of the DependencyObject reference topic.

必須在 UI 執行緒上建立 DependencyObject ,且具有 UI 執行緒的親和性。 因為它是可跨執行緒取得的進入點,DependencyObject.Dispatcher 是唯一的 DependencyObject 實例 API 或其任何可從非 UI 執行緒存取的子類別,而不會擲回跨執行緒例外狀況。 如果您嘗試從背景工作執行緒或其他非 UI 執行緒呼叫它們,所有其他 DependencyObject API 都會擲回例外狀況。

具體而言,Dispatcher 屬性會取得與應用程式 UI 執行緒相關聯的 CoreDispatcher 。 如果您想要查詢或變更任何相依性屬性的值,還是需要透過CoreDispatcherRunAsync方法執行程式碼,即使該物件尚未與 XAML 視覺化樹狀結構相關聯,或可見 UI (應用程式視窗的視覺化根目錄) 也一樣。

Window.Dispatcher 也會參考與 UI 執行緒相關聯的 CoreDispatcherWindow.Dispatcher 基本上只是 CoreWindow.Dispatcher 的包裝函式,因此 Window 類別可以輕鬆地存取

注意

發送器值的連線無法在設計階段檢視中使用。 如果您已建立使用發送器值的自訂控制項,而且設計階段環境會透過設計檢視所使用的程式碼路徑來存取該程式碼,例如建構函式和 Loaded 處理常式,這可能會導致問題。 如果您要撰寫自訂控制項並遇到此問題,請考慮在程式碼中引進防護條件,例如在 DesignModeEnabled為 true時不要呼叫該程式碼。

適用於