Maison >développement back-end >C++ >Comment mettre à jour en toute sécurité une interface utilisateur WPF à partir d'un fil d'arrière-plan distinct ?
Énoncé du problème :
Dans un WPF multithread application, il est nécessaire de mettre à jour l’interface utilisateur à partir d’un thread d’arrière-plan exécuté dans une classe distincte. L'objectif est de garder l'interface utilisateur réactive pendant que de longs calculs sont effectués.
Solution utilisant la répartition d'événements :
Exemple de code :
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void startCalc(object sender, RoutedEventArgs e) { inputValues input = new inputValues(); calcClass calculations = new calcClass(); try { // Parse user inputs } catch { // Handle input errors } // Register event handler calculations.ProgressUpdate += OnProgressUpdate; // Start background calculations Thread calcthread = new Thread( new ParameterizedThreadStart(calculations.testMethod)); calcthread.Start(input); } private void OnProgressUpdate(object sender, YourEventArgs args) { Dispatcher.Invoke((Action)delegate() { // Update UI based on event arguments }); } } public class calcClass { public event EventHandler<YourEventArgs> ProgressUpdate; public void testmethod(inputValues input) { for (int i = 0; i < 1000; i++) { // Perform calculations // Raise ProgressUpdate event when needed if (ProgressUpdate != null) ProgressUpdate(this, new YourEventArgs(status)); Thread.Sleep(10); } } }
Avantages de la répartition des événements :
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!