Heim > Backend-Entwicklung > C++ > Wie kann ich WPF-UI-Elemente sicher aus einem Hintergrundthread aktualisieren?

Wie kann ich WPF-UI-Elemente sicher aus einem Hintergrundthread aktualisieren?

Susan Sarandon
Freigeben: 2025-01-11 21:11:42
Original
688 Leute haben es durchsucht

How Can I Safely Update WPF UI Elements from a Background Thread?

Sicherer Zugriff auf den UI-(Haupt-)Thread in WPF

In WPF-Anwendungen kann die Interaktion mit dem UI-Thread von einem Nicht-UI-Thread (z. B. einem Hintergrundthread) zu Ausnahmen und Abstürzen führen. Dies liegt daran, dass der UI-Thread über einen Planer verfügt, der Aktualisierungen der UI verwaltet und die Thread-Sicherheit gewährleistet.

Frage:

Betrachten Sie den folgenden Code, der ein DataGrid aktualisiert, wenn eine Protokolldatei geändert wird:

<code class="language-c#">private void watcher_Changed(object sender, FileSystemEventArgs e)
{
    if (File.Exists(syslogPath))
    {
        ...
        DGAddRow(crp.Protocol, ft);
    }
}</code>
Nach dem Login kopieren

Die DGAddRow-Methode fügt dem DataGrid eine neue Zeile hinzu, was im UI-Thread erfolgen muss. Da watcher_Changed jedoch in einem Hintergrundthread ausgeführt wird, versucht es, die Benutzeroberfläche direkt zu ändern, was zu einer Ausnahme führt.

Lösung:

Um sicher auf den UI-Thread zuzugreifen, verwenden Sie die Dispatcher.Invoke-Methode von Application oder ein beliebiges UIElement. Mit dieser Methode können Sie Code im UI-Thread ausführen.

<code class="language-c#">Application.Current.Dispatcher.Invoke(new Action(() => {
    DGAddRow(crp.Protocol, ft);
}));</code>
Nach dem Login kopieren

Durch die Verwendung von Dispatcher.Invoke wird der Code, der die Benutzeroberfläche aktualisiert, im Hauptthread ausgeführt, wodurch potenzielle Threading-Probleme vermieden werden.

Das obige ist der detaillierte Inhalt vonWie kann ich WPF-UI-Elemente sicher aus einem Hintergrundthread aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage