Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini C# TextBox dengan Selamat daripada Thread Berasingan?

Bagaimana untuk Mengemas kini C# TextBox dengan Selamat daripada Thread Berasingan?

Barbara Streisand
Barbara Streisandasal
2024-12-31 20:37:13366semak imbas

How to Safely Update a C# TextBox from a Separate Thread?

Mengemas kini TextBox daripada Thread Berasingan dalam C#

Dalam aplikasi Windows Forms, adalah penting untuk mengelak daripada mengakses elemen UI daripada utas bukan UI . Apabila cuba memanipulasi TextBox daripada utas yang berasingan, anda mungkin menghadapi pengecualian "Jenis operasi ini tidak sah pada utas ini". Untuk menangani perkara ini, anda perlu mengendalikan komunikasi silang benang dengan betul.

Untuk mengemas kini TextBox daripada urutan yang berasingan, anda harus mencipta kaedah pada borang utama anda yang menyemak sifat InvokeRequired bagi kelas Kawalan. Jika InvokeRequired adalah benar, ini bermakna panggilan dibuat daripada urutan bukan UI dan anda perlu menggunakan kaedah Invoke untuk menyusun panggilan ke urutan UI.

Sebagai contoh, pertimbangkan coretan kod berikut :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        new Thread(SampleFunction).Start();
    }

    public void AppendTextBox(string value)
    {
        if (InvokeRequired)
        {
            this.Invoke(new Action<string>(AppendTextBox), new object[] { value });
            return;
        }
        ActiveForm.Text += value;
    }

    void SampleFunction()
    {
        // Gets executed on a separate thread
        for (int i = 0; i < 5; i++)
        {
            AppendTextBox("hi. ");
            Thread.Sleep(1000);
        }
    }
}

Dalam contoh ini, kaedah AppendTextBox menyemak bendera InvokeRequired dan, jika perlu, menggunakan Jemput untuk menyusun panggilan ke urutan UI. Dalam kaedah SampleFunction, kaedah AppendTextBox boleh dipanggil dengan selamat dari benang berasingan tanpa menyebabkan pengecualian. Pendekatan ini membolehkan anda mengemas kini elemen UI daripada urutan bukan UI sambil mengekalkan keselamatan urutan.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini C# TextBox dengan Selamat daripada Thread Berasingan?. 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