Heim > Backend-Entwicklung > C++ > Wie aktualisiere ich eine TextBox sicher über einen seriellen Port in C#?

Wie aktualisiere ich eine TextBox sicher über einen seriellen Port in C#?

DDD
Freigeben: 2025-01-23 02:13:07
Original
314 Leute haben es durchsucht

How to Safely Update a TextBox from a Serial Port in C#?

Lösen der Cross-Thread-Ausnahme beim Aktualisieren einer TextBox über einen seriellen Port in C#

Ein häufiges Problem bei der seriellen C#-Kommunikation besteht darin, eine TextBox über den serialPort1_DataReceived-Ereignishandler zu aktualisieren. Da der serielle Port in einem separaten Thread ausgeführt wird, wird beim direkten Zugriff auf die TextBox über diesen Ereignishandler die Ausnahme „Cross-Thread-Vorgang nicht gültig“ ausgelöst.

Die Lösung erfordert eine Thread-sichere Methode, um den Text der TextBox zu aktualisieren. Dies wird erreicht, indem das Update zurück an den UI-Thread gemarshallt wird. So geht's:

<code class="language-csharp">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;
    }
}</code>
Nach dem Login kopieren

Diese SetText-Methode prüft, ob der aktuelle Thread der UI-Thread ist (textBox1.InvokeRequired). Wenn nicht, verwendet es Invoke, um den SetText-Aufruf zurück an den UI-Thread zu leiten und so die Thread-Sicherheit zu gewährleisten. Andernfalls wird die TextBox direkt aktualisiert.

So integrieren Sie dies in Ihren serialPort1_DataReceivedEreignishandler:

<code class="language-csharp">private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string receivedData = serialPort1.ReadExisting();
    SetText(receivedData); // Use the thread-safe SetText method
}</code>
Nach dem Login kopieren

Dieser überarbeitete Ereignishandler liest Daten von der seriellen Schnittstelle und verwendet die Methode SetText, um die TextBox sicher zu aktualisieren und so die Thread-übergreifende Ausnahme zu verhindern. Dieser Ansatz garantiert, dass UI-Updates immer im richtigen Thread durchgeführt werden, wodurch die Anwendungsstabilität gewahrt bleibt.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine TextBox sicher über einen seriellen Port in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage