Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini TextBox dengan Selamat dari Port Serial dalam C#?
Menyelesaikan Pengecualian Cross-Thread Apabila Mengemas kini Kotak Teks daripada Port Bersiri dalam C#
Masalah biasa dalam komunikasi bersiri C# melibatkan pengemaskinian TextBox daripada pengendali acara serialPort1_DataReceived
. Oleh kerana port bersiri beroperasi pada urutan yang berasingan, mengakses TextBox secara langsung daripada pengendali acara ini membuang pengecualian "Operasi lintasan tidak sah".
Penyelesaian memerlukan kaedah selamat benang untuk mengemas kini teks TextBox. Ini dicapai dengan menyusun kemas kini kembali ke urutan UI. Begini caranya:
<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>
Kaedah SetText
ini menyemak sama ada utas semasa ialah utas UI (textBox1.InvokeRequired
). Jika tidak, ia menggunakan Invoke
untuk mengawal panggilan SetText
semula ke urutan UI, memastikan keselamatan rangkaian. Jika tidak, ia mengemas kini TextBox secara langsung.
Berikut ialah cara untuk menyepadukan ini ke dalam serialPort1_DataReceived
pengendali acara anda:
<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>
Pengendali acara yang disemak ini membaca data daripada port bersiri dan menggunakan kaedah SetText
untuk mengemas kini TextBox dengan selamat, menghalang pengecualian lintasan benang. Pendekatan ini menjamin bahawa kemas kini UI sentiasa dilakukan pada urutan yang betul, mengekalkan kestabilan aplikasi.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini TextBox dengan Selamat dari Port Serial dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!