Heim > Backend-Entwicklung > C++ > Wie aktualisiere ich UI-Elemente aus Nicht-UI-Threads in C# sicher?

Wie aktualisiere ich UI-Elemente aus Nicht-UI-Threads in C# sicher?

Susan Sarandon
Freigeben: 2025-01-23 02:14:15
Original
248 Leute haben es durchsucht

How to Safely Update UI Elements from Non-UI Threads in C#?

Threadübergreifende Fehler vermeiden: UI-Elemente aus Nicht-UI-Threads sicher aktualisieren

Bei der Interaktion mit UI-Elementen aus einem Nicht-UI-Thread (z. B. dem Thread, der durch ein Datenempfangsereignis über eine serielle Schnittstelle erzeugt wurde) müssen Thread-Sicherheitsprobleme behandelt werden, um Thread-übergreifende Fehler zu vermeiden.

Im C#-Code tritt der Fehler „Ungültiger Thread-übergreifender Vorgang: Zugriff auf das Steuerelement ‚textBox1‘ von einem anderen Thread als dem Thread, der das Steuerelement ‚textBox1‘ erstellt hat“ auf, weil der UI-Thread Eigentümer des Steuerelements „textBox1“ ist und von einem anderen darauf zugreift Thread führt zu Thread-Affinitätskonflikten.

Um dieses Problem zu lösen, muss ein Scheduler verwendet werden, der es dem entsprechenden Thread (normalerweise dem UI-Thread) ermöglicht, auf die UI-Elemente zuzugreifen. In diesem Fall können Delegaten und die Invoke-Methode verwendet werden, um einen threadsicheren Zugriff sicherzustellen:

<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

Jetzt im Ereignishandler serialPort1_DataReceived:

<code class="language-csharp">private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
  txt += serialPort1.ReadExisting().ToString();
  SetText(txt.ToString());
}</code>
Nach dem Login kopieren

Durch die Verwendung der SetText-Methode können Sie die Aufgabe, die Texteigenschaft von textBox1 zu aktualisieren, an den UI-Thread delegieren und so einen sicheren und fehlerfreien Zugriff auf UI-Elemente von Nicht-UI-Threads gewährleisten.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich UI-Elemente aus Nicht-UI-Threads in C# sicher?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage