Cara Menulis ke TextBox daripada Thread Lain dalam Aplikasi Borang C# Windows
Dalam aplikasi Borang C# Windows, mengubah suai kandungan TextBox daripada thread selain daripada thread UI boleh membawa kepada isu threading. Untuk menangani perkara ini, adalah penting untuk memahami konsep keselamatan benang.
Memahami Keselamatan Benang
Keselamatan benang merujuk kepada keupayaan blok kod atau objek untuk dilaksanakan serentak dengan berbilang benang tanpa menyebabkan kesan sampingan yang tidak diingini. Dalam konteks aplikasi Windows Form, kawalan UI, termasuk TextBoxes, tidak selamat untuk benang. Percubaan untuk mengemas kini sifat mereka daripada urutan bukan UI boleh mengakibatkan pengecualian atau gelagat yang tidak dijangka.
Penyelesaian: Kaedah Kawalan Penggunaan
Untuk mengubah suai elemen UI dengan selamat daripada yang berasingan benang, anda mesti menggunakan kaedah mereka menggunakan kaedah Invoke atau BeginInvoke kawalan. Kaedah ini memastikan bahawa operasi disusun ke urutan UI, yang merupakan satu-satunya urutan yang boleh berinteraksi dengan kawalan dengan selamat.
Sampel Kod
Pertimbangkan kod berikut sampel yang menunjukkan penulisan ke TextBox daripada benang berasingan menggunakan kaedah Invoke:
public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { // Invoke the AppendTextBox method if the current thread is not the UI thread. this.Invoke(new Action<string>(AppendTextBox), new object[] { value }); return; } textBox1.Text += value; } void SampleFunction() { for (int i = 0; i < 5; i++) { AppendTextBox("hi. "); Thread.Sleep(1000); } } }
Dalam ini kod:
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini C# Windows Forms TextBox dengan Selamat daripada Benang Bukan UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!