DependencyObject.Dispatcher Eigenschaft

Definition

Ruft den CoreDispatcher ab, dem dieses Objekt zugeordnet ist. Der CoreDispatcher stellt eine Einrichtung dar, die auf das DependencyObject im UI-Thread zugreifen kann, auch wenn der Code von einem Nicht-UI-Thread initiiert wird.

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

Eigenschaftswert

CoreDispatcher

Der CoreDispatcher , dem das DependencyObject-Objekt zugeordnet ist, das den UI-Thread darstellt.

Beispiele

In diesem Beispiel wird eine Verwendung von Dispatcher für die implizite Verwendung einer CodeBehind-Datei für eine Seite veranschaulicht. In diesem Beispiel wird ein Lambda-Ausdruck verwendet, um die DispatchedHandler-Implementierung hinzuzufügen. Der Handler selbst behandelt das Accelerometer.ReadingChanged-Ereignis , das nicht im UI-Thread ausgeführt wird.

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);
    });
}

Hinweise

Die Dispatcher-Eigenschaft stellt den CoreDispatcher-Verweis bereit, der zum Marshalaufruf von Nicht-UI-Threads verwendet werden kann, wobei RunAsync und eine wartende Funktion verwendet werden können. Weitere Informationen zu wartenden Funktionen finden Sie unter Aufrufen asynchroner APIs in C# oder Visual Basic. Siehe auch Abschnitt "DependencyObject und Threading" des Referenzthemas "DependencyObject ".

Ein Abhängigkeitsobjekt muss auf einem UI-Thread erstellt werden und hat eine Affinität zum UI-Thread. Da es sich um einen Einstiegspunkt handelt, der das Abrufen über Threads ermöglicht, ist DependencyObject.Dispatcher die einzige Instanz-API von DependencyObject oder einer seiner Unterklassen, auf die über einen Nicht-UI-Thread zugegriffen werden kann, ohne eine Threadübergreifende Ausnahme zu auslösen. Alle anderen DependencyObject-APIs lösen eine Ausnahme aus, wenn Sie versuchen, sie aus einem Workerthread oder einem anderen Nicht-UI-Thread aufzurufen.

Insbesondere ruft die Dispatcher-Eigenschaft den CoreDispatcher ab, der dem App-UI-Thread zugeordnet ist. Das Ausführen von Code über die RunAsync-Methode der CoreDispatcher ist erforderlich, wenn Sie den Wert einer Abhängigkeitseigenschaft abfragen oder ändern möchten, auch wenn dieses Objekt noch nicht der visuellen XAML-Struktur oder der sichtbaren Benutzeroberfläche (dem visuellen Stamm des App-Fensters) zugeordnet ist.

Window.Dispatcher verweist auch auf einen CoreDispatcher , der dem UI-Thread zugeordnet ist. Window.Dispatcher ist im Grunde nur ein Wrapper um CoreWindow.Dispatcher , sodass eine Window-Klasse einfach darauf zugreifen kann.

Hinweis

Die Verbindung für einen Dispatcher-Wert ist in einer Entwurfszeitansicht nicht verfügbar. Dies kann Probleme verursachen, wenn Sie ein benutzerdefiniertes Steuerelement erstellt haben, das Dispatcher-Werte verwendet und auf diesen Code über Codepfade zugegriffen wird, die eine Entwurfsansicht verwendet, z. B. Konstruktoren und geladene Handler. Wenn Sie ein benutzerdefiniertes Steuerelement schreiben und dieses Problem auftreten, sollten Sie eine bedingte Schutzfunktion in Ihrem Code einführen, z. B. das Aufrufen dieses Codes, wenn DesignModeEnabledwahr ist.

Gilt für