Heim >Backend-Entwicklung >C++ >Wie aktualisiere ich eine C#-TextBox sicher aus einem separaten Thread?
Aktualisieren einer TextBox aus einem separaten Thread in C#
In Windows Forms-Anwendungen ist es wichtig, den Zugriff auf UI-Elemente aus Nicht-UI-Threads zu vermeiden . Wenn Sie versuchen, eine TextBox von einem separaten Thread aus zu bearbeiten, kann die Ausnahme „Diese Art von Vorgang ist in diesem Thread nicht gültig“ auftreten. Um dieses Problem zu beheben, müssen Sie die Thread-übergreifende Kommunikation ordnungsgemäß handhaben.
Um eine TextBox aus einem separaten Thread zu aktualisieren, sollten Sie in Ihrem Hauptformular eine Methode erstellen, die nach der InvokeRequired-Eigenschaft der Control-Klasse sucht. Wenn InvokeRequired „true“ ist, bedeutet dies, dass der Aufruf von einem Nicht-UI-Thread erfolgt und Sie die Invoke-Methode verwenden müssen, um den Aufruf an den UI-Thread zumarshallen.
Betrachten Sie beispielsweise den folgenden Codeausschnitt :
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); } } }
In diesem Beispiel prüft die AppendTextBox-Methode das InvokeRequired-Flag und verwendet bei Bedarf Invoke zum Marshallen der Aufruf des UI-Threads. Innerhalb der SampleFunction-Methode kann die AppendTextBox-Methode sicher vom separaten Thread aufgerufen werden, ohne eine Ausnahme auszulösen. Mit diesem Ansatz können Sie UI-Elemente aus Nicht-UI-Threads aktualisieren und gleichzeitig die Thread-Sicherheit wahren.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine C#-TextBox sicher aus einem separaten Thread?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!