在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中文網其他相關文章!