Heim >Backend-Entwicklung >C++ >Wie aktualisiere ich eine WPF-Benutzeroberfläche aus einem separaten Thread in einer anderen Klasse?
F: Wie aktualisiere ich eine WPF-Benutzeroberfläche aus einem Arbeitsthread, der in einer separaten Klasse ausgeführt wird?
A: Um die Benutzeroberfläche von einem anderen Ort aus zu aktualisieren Thread:
Ereignisbasierte Kommunikation:
Beispiel für die Verwendung Ereignisse:
// Main window class private void startCalc(object sender, RoutedEventArgs e) { // Create a new worker class instance CalcClass calc = new CalcClass(); // Register event handler to receive UI update notifications calc.ProgressUpdate += (s, e) => { Dispatcher.Invoke((Action)(() => { /* Update UI here */ })); }; // Start the worker thread Thread calcThread = new Thread(new ParameterizedThreadStart(calc.TestMethod)); calcThread.Start(input); } // Worker class public class CalcClass { public event EventHandler ProgressUpdate; public void TestMethod(object input) { // Perform calculations // Raise event to notify UI update if (ProgressUpdate != null) ProgressUpdate(this, new EventArgs()); } }
Zusätzlicher Hinweis:
Alternative Lösung mit Aufgabe:
In .NET 4.5 und höher Sie können auch asynchrone Programmierung mit Task verwenden, um die Benutzeroberfläche übersichtlicher und effizienter zu aktualisieren Weg.
Aktualisierter Code mit Aufgabe:
// Main window class private async void buttonDoCalc_Clicked(object sender, EventArgs e) { // Create a new worker class instance CalcClass calc = new CalcClass(); // Start the asynchronous calculation await calc.CalcAsync(); } // Worker class public class CalcClass { public async Task CalcAsync() { // Perform calculations // Update UI using Dispatcher.Invoke Dispatcher.Invoke((Action)(() => { /* Update UI here */ })); } }
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine WPF-Benutzeroberfläche aus einem separaten Thread in einer anderen Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!