Mise à jour d'une zone de texte à partir d'un fil de discussion séparé en C#
Dans les applications Windows Forms, il est crucial d'éviter d'accéder aux éléments d'interface utilisateur à partir de fils de discussion non-UI . Lorsque vous tentez de manipuler un TextBox à partir d’un thread distinct, vous pouvez rencontrer l’exception « Ce type d’opération n’est pas valide sur ce thread ». Pour résoudre ce problème, vous devez gérer correctement la communication entre threads.
Pour mettre à jour une TextBox à partir d'un thread distinct, vous devez créer une méthode sur votre formulaire principal qui vérifie la propriété InvokeRequired de la classe Control. Si InvokeRequired est vrai, cela signifie que l'appel est effectué à partir d'un thread non-UI et que vous devez utiliser la méthode Invoke pour rassembler l'appel vers le thread UI.
Par exemple, considérez l'extrait de code suivant :
public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { this.Invoke(new Action<string>(AppendTextBox), new object[] { value }); return; } ActiveForm.Text += value; } void SampleFunction() { // Gets executed on a separate thread for (int i = 0; i < 5; i++) { AppendTextBox("hi. "); Thread.Sleep(1000); } } }
Dans cet exemple, la méthode AppendTextBox vérifie l'indicateur InvokeRequired et, si nécessaire, utilise Invoke pour rassembler le appel au fil de discussion de l'interface utilisateur. Dans la méthode SampleFunction, la méthode AppendTextBox peut être appelée en toute sécurité à partir du thread séparé sans provoquer d'exception. Cette approche vous permet de mettre à jour les éléments de l'interface utilisateur à partir de threads non-UI tout en préservant la sécurité des threads.
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!