解決C#串口更新TextBox時出現跨執行緒異常
C# 串列通訊中的一個常見問題涉及從 serialPort1_DataReceived
事件處理程序更新文字方塊。 由於串行埠在單獨的執行緒上操作,因此從此事件處理程序直接存取 TextBox 會引發「跨執行緒操作無效」例外。
該解決方案需要一個線程安全的方法來更新 TextBox 的文字。 這是透過將更新編組回 UI 執行緒來實現的。 方法如下:
<code class="language-csharp">delegate void SetTextCallback(string text); private void SetText(string text) { if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } }</code>
這個SetText
方法檢查目前執行緒是否是UI執行緒(textBox1.InvokeRequired
)。如果沒有,它使用 Invoke
將 SetText
回調編組回 UI 線程,確保線程安全。 否則,它會直接更新 TextBox。
以下是將其整合到您的 serialPort1_DataReceived
事件處理程序中的方法:
<code class="language-csharp">private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string receivedData = serialPort1.ReadExisting(); SetText(receivedData); // Use the thread-safe SetText method }</code>
修改後的事件處理程序從串口讀取數據,並使用SetText
方法安全地更新TextBox,防止跨線程異常。 這種方法確保 UI 更新始終在正確的執行緒上執行,從而保持應用程式的穩定性。
以上是如何在 C# 中從序列埠安全地更新文字方塊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!