Maison >développement back-end >C++ >Comment mettre à jour une interface utilisateur WPF à partir d'un thread distinct dans une classe différente ?
Q : Comment mettre à jour une interface utilisateur WPF à partir d'un thread de travail exécuté dans une classe distincte ?
A : Pour mettre à jour l'interface utilisateur à partir d'un autre thread :
Communication basée sur les événements :
Exemple d'utilisation d'événements :
// 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()); } }
Supplémentaire Remarque :
Solution alternative utilisant Task :
Dans .NET 4.5 et versions ultérieures, vous pouvez également utiliser la programmation asynchrone avec Task pour mettre à jour l'interface utilisateur de manière plus propre et plus efficace. manière.
Code mis à jour à l'aide de la tâche :
// 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 */ })); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!