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
Lepaskan: 2025-01-23 02:14:15
asal
286 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan