Maison > développement back-end > C++ > Comment mettre à jour en toute sécurité une interface graphique à partir d'un fil d'arrière-plan en C# ?

Comment mettre à jour en toute sécurité une interface graphique à partir d'un fil d'arrière-plan en C# ?

Mary-Kate Olsen
Libérer: 2025-01-10 09:32:41
original
928 Les gens l'ont consulté

How to Safely Update a GUI from a Background Thread in C#?

Guide de mise à jour de la sécurité des threads C# GUI

Description du problème

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.

Solution BackgroundWorker

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Tâche en cours

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal