Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Benang Bukan UI dalam C#?

Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Benang Bukan UI dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-23 02:14:15287semak imbas

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

Elakkan ralat silang benang: Kemas kini elemen UI dengan selamat daripada urutan bukan UI

Apabila berinteraksi dengan elemen UI daripada utas bukan UI (seperti utas yang dihasilkan oleh acara penerimaan data port bersiri), isu keselamatan utas mesti ditangani untuk mengelakkan ralat silang benang.

Dalam kod C#, ralat "Operasi rentas benang tidak sah: mengakses kawalan 'textBox1' daripada utas selain daripada utas yang mencipta kawalan 'textBox1'" berlaku kerana utas UI memiliki kawalan textBox1 dan mengaksesnya daripada yang lain benang akan Menyebabkan konflik pertalian benang.

Untuk menyelesaikan masalah ini, penjadual mesti digunakan yang membenarkan urutan yang sesuai (biasanya utas UI) mengakses elemen UI. Dalam kes ini, perwakilan dan kaedah Invoke boleh digunakan untuk memastikan akses selamat benang:

<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>

Sekarang, dalam pengendali acara bersiriPort1_DataReceived:

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

Dengan menggunakan kaedah SetText, anda boleh mengagihkan tugas mengemas kini sifat teks textBox1 kepada utas UI, memastikan akses selamat dan bebas ralat kepada elemen UI daripada utas bukan UI.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Benang Bukan UI dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn