winform跨線程訪問控制項
A. C# 簡易TCP網口調試助手(一) 客戶端Client
最近在開發上位機過程中,經常需要用到網口和串口通訊,網上的資料和開源代碼並不多。下面我將介紹一個實用的TCP通訊工具包,並詳細記錄使用步驟。
這個博客旨在記錄我學到的知識,方便以後查閱。同時,我也會註明來源,感興趣的讀者可以前往詳細了解。
實現效果如下:右側的測試程序可以收發數據,檢測連接狀態。即使在5000多行數據量的情況下,也不會出現數據錯誤,速度也很快,完全滿足個人工作需求。重點是使用「STTech.ByteslO.Tcp」這個nuget包。
在開發過程中,我使用了以下環境:
開發工具:Visual Studio 2022
用戶界面框架:winform
框架版本:.NET Framework 4.8
接下來是項目搭建步驟:
1. 新建winform項目
選擇「Windows窗體應用(NET Framework)」項目,輸入項目名稱為TCP_Client,使用框架為.NET Framework 4.8。
2. 添加nuget包
右鍵項目,添加TCP的nuget包,使用STTech.ByteslO.Tcp,版本為2.14.6-alpha0225。在nuget管理界面的瀏覽頁面下搜索bytesio,找到nuget包,點擊安裝並確定。
3. 創建界面
放入容器控制項groupbox、工具條控制項ToolStrip和顯示屬性的PropertyGrid控制項。groupbox的text改為「連接信息」,ToolStrip增加兩個text類型的文本按鈕:連接、斷開。PropertyGrid的dock設為Fill,並將控制項置於頂層。再加兩個groupbox容器,放置右側,內部各塞一個 RichTextBox。
以下是主要代碼編寫內容:
1. TcpClient的創建和「連接」、「斷開」按鈕的簡單代碼實現
代碼如下:
2. TcpClient的「數據接收」、」連接狀態「的事件函數處理 和 「發送」按鈕的簡單代碼實現
代碼如下:
其中,跨UI線程的解決方式和原出處不同。原出處是通過關閉跨UI線程報錯來解決問題,這里是調用Form的Invoke方法跨線程訪問控制項。
總結:STTech.ByteslO.Tcp這個nuget包使用起來很好,上手快,大數據量收發無錯誤。winform跨UI線程調用界面控制項可以使用Invoke來實現。