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>
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>
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!