Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengemas kini C# Windows Forms TextBox dengan Selamat daripada Benang Bukan UI?

Bagaimana untuk Mengemas kini C# Windows Forms TextBox dengan Selamat daripada Benang Bukan UI?

Patricia Arquette
Lepaskan: 2024-12-31 07:14:10
asal
738 orang telah melayarinya

How to Safely Update a C# Windows Forms TextBox from a Non-UI Thread?

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

Dalam ini kod:

  • Kaedah AppendTextBox ditakrifkan untuk mengendalikan isu keselamatan thread.
  • SampleFunction berjalan pada thread berasingan dan menulis ke TextBox dengan menggunakan kaedah AppendTextBox.
  • Sifat InvokeRequired menyemak sama ada urutan semasa bukan urutan UI. Jika ya, ia menggunakan kaedah AppendTextBox pada utas UI. Ini memastikan TextBox dikemas kini dengan selamat.

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!

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