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); } } }
Dans cet 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!