Maison > développement back-end > C++ > Comment mettre à jour en toute sécurité une zone de texte C# Windows Forms à partir d'un thread non-UI ?

Comment mettre à jour en toute sécurité une zone de texte C# Windows Forms à partir d'un thread non-UI ?

Patricia Arquette
Libérer: 2024-12-31 07:14:10
original
739 Les gens l'ont consulté

How to Safely Update a C# Windows Forms TextBox from a Non-UI Thread?

Comment écrire dans une zone de texte à partir d'un autre thread dans une application Windows Form C#

Dans une application Windows Form C#, modifier le contenu de une TextBox provenant d'un thread autre que le thread de l'interface utilisateur peut entraîner des problèmes de thread. Pour résoudre ce problème, il est essentiel de comprendre le concept de sécurité des threads.

Comprendre la sécurité des threads

La sécurité des threads fait référence à la capacité d'un bloc de code ou d'un objet à être exécuté simultanément par plusieurs threads sans provoquer d’effets secondaires involontaires. Dans le contexte d’une application Windows Form, les contrôles de l’interface utilisateur, y compris les TextBox, ne sont pas thread-safe. Tenter de mettre à jour leurs propriétés à partir d'un thread non-UI peut entraîner des exceptions ou un comportement inattendu.

Solution : Invoquer des méthodes de contrôle

Pour modifier en toute sécurité les éléments de l'interface utilisateur à partir d'un thread, vous devez appeler leurs méthodes à l’aide des méthodes Invoke ou BeginInvoke du contrôle. Ces méthodes garantissent que l'opération est marshalée vers le thread de l'interface utilisateur, qui est le seul thread capable d'interagir en toute sécurité avec les contrôles.

Exemple de code

Considérez le code suivant exemple qui montre l'écriture dans une TextBox à partir d'un fil de discussion séparé à l'aide de la méthode Invoke :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        new Thread(SampleFunction).Start();
    }

    public void AppendTextBox(string value)
    {
        if (InvokeRequired)
        {
            // Invoke the AppendTextBox method if the current thread is not the UI thread.
            this.Invoke(new Action<string>(AppendTextBox), new object[] { value });
            return;
        }
        textBox1.Text += value;
    }

    void SampleFunction()
    {
        for (int i = 0; i < 5; i++)
        {
            AppendTextBox("hi.  ");
            Thread.Sleep(1000);
        }
    }
}
Copier après la connexion

Dans cet code :

  • La méthode AppendTextBox est définie pour gérer le problème de sécurité des threads.
  • La SampleFunction s'exécute sur un thread séparé et écrit dans la TextBox en appelant la méthode AppendTextBox.
  • La propriété InvokeRequired vérifie si le thread actuel n'est pas le thread de l'interface utilisateur. Si tel est le cas, il appelle la méthode AppendTextBox sur le thread de l'interface utilisateur. Cela garantit que la TextBox est mise à jour en toute sécurité.

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