Vermeiden Sie Cross-Thread-Fehler: Aktualisieren Sie die UI-Elemente aus Nicht-UI-Threads
sicherBei der Interaktion mit UI-Elementen aus Nicht-UI-Threads (z. B. Threads, die durch Empfangen von Ereignissen aus seriellen Portdaten generiert werden) müssen Probleme mit Thread-Sicherheit behandelt werden, um Cross-Thread-Fehler zu vermeiden.
In C# Code ist der Fehler "Querveradungsoperation" ungültig: Zugriffskontrolle "Textbox1" von einem anderen Thread als dem Thread, der das Steuerelement 'textbox1' "erstellt hat, weil der UI-Thread das Textbox1-Steuerelement besitzt und darauf zugreift Aus einem anderen Thread führt Faden Assoziationskonflikte.
Um dieses Problem zu lösen, muss ein Scheduler verwendet werden, um geeignete Threads (normalerweise UI -Threads) zuzulassen, um auf UI -Elemente zuzugreifen. In diesem Fall können Methoden delegieren und aufrufen, um einen Thread-Safe-Zugriff sicherzustellen:
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
Nun, im serialport1_datarecebed Ereignishandler:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
txt = serialPort1.ReadExisting().ToString();
SetText(txt.ToString());
}
Mit der SetText-Methode können Sie Aufgaben delegieren, die das Textbox1-Textattribut in den UI-Thread aktualisieren, um sicheren und fehlerfreien Zugriff auf UI-Elemente von Nicht-UI-Threads sicherzustellen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3