Guide de mise à jour de la sécurité des threads C# GUI
La mise à jour de l'interface graphique à partir d'un fil d'arrière-plan est un problème délicat. Tenter de le faire directement peut entraîner un comportement inhabituel ou inattendu.
1. Configuration initiale : Instanciez un BackgroundWorker et configurez ses gestionnaires d'événements.
<code class="language-csharp">private BackgroundWorker _backgroundWorker; _backgroundWorker = new BackgroundWorker(); _backgroundWorker.DoWork += backgroundWorker_DoWork; _backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged; _backgroundWorker.WorkerReportsProgress = true;</code>
2. Tâches en arrière-plan : Dans le gestionnaire d'événements DoWork, exécutez des tâches de longue durée et signalez périodiquement la progression.
<code class="language-csharp">public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { // ... 执行你的任务 object param = "一些数据"; _backgroundWorker.ReportProgress(0, param); }</code>
3. Rapport d'avancement : Dans le gestionnaire d'événements ProgressChanged, mettez à jour l'interface graphique avec la progression signalée.
<code class="language-csharp">private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { // 使用e.ProgressPercentage和e.UserState更新UI }</code>
4. Démarrez la tâche en arrière-plan : Appelez RunWorkerAsync pour démarrer la tâche en arrière-plan.
<code class="language-csharp">_backgroundWorker.RunWorkerAsync();</code>
5. Planification continue (facultatif) : Si vous devez répéter la tâche régulièrement, vous pouvez ajouter le code suivant dans le gestionnaire d'événements RunWorkerCompleted.
<code class="language-csharp">void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // UI 更新 Thread.Sleep(10000); Update(); }</code>
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!