首頁 > 後端開發 > C++ > 如何從單獨的執行緒安全地更新 C# 文字方塊?

如何從單獨的執行緒安全地更新 C# 文字方塊?

Barbara Streisand
發布: 2024-12-31 20:37:13
原創
350 人瀏覽過

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

在C# 中從單獨執行緒更新TextBox

在Windows 窗體應用程式中,避免從非UI 執行緒存取UI 元素至關重要。當嘗試從單獨的執行緒操作 TextBox 時,您可能會遇到「此類型的操作在此執行緒上無效」例外狀況。為了解決這個問題,您需要正確處理跨線程通訊。

要從單獨的執行緒更新 TextBox,您應該在主窗體上建立一個方法來檢查 Control 類別的 InvokeRequired 屬性。如果 InvokeRequired 為 true,則表示呼叫是從非 UI 執行緒進行的,您需要使用 Invoke 方法將呼叫編組到 UI 執行緒。

例如,請考慮以下程式碼片段:

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);
        }
    }
}
登入後複製

在此範例中,AppendTextBox 方法檢查 InvokeRequired 標誌,並在必要時使用 Invoke 封送呼叫 UI 執行緒。在 SampleFunction 方法中,可以從單獨的執行緒安全地呼叫 AppendTextBox 方法,而不會導致例外狀況。這種方法使您能夠從非 UI 執行緒更新 UI 元素,同時保持執行緒安全。

以上是如何從單獨的執行緒安全地更新 C# 文字方塊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板