国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 串口接收數據中serialPort.close()死鎖的實例

2019-10-29 21:07:56
字體:
來源:轉載
供稿:網友

最近在做一個有關高鐵模擬倉顯示系統的客戶端程序,在這個程序中要運用串口serialPort傳輸數據,因為每次接收數據結束后要更新UI界面,所以就用到了的Invoke,將更新UI的程序代碼封裝到一個方法中,然后通過Incoke調用,程序跑起來沒有任何問題,但是當你執行serialPort.close()是程序就會發生死鎖,整個程序卡在那里動都動不了。

上網查了很多資料,有各種這樣的說法,有的說定義一個接收數據的標志,如果在執行關閉程序是進行判斷,如果數據接收完了就關閉串口,沒有的話繼續執行,但是經過親自測試并沒有什么卵用,最后自己研究invoke的時候發現還有Begininvoke,同時也發現了他們之間的不同,begininvoke用于后臺更新UI數據無需等待的情況,而invoke用于后臺更新UI數據無需要等待的情況,弄明白這兩個之間的不同之后才明白原來執行serialPort.close()發生死鎖的原因就是invoke在作祟,改成begininvoke就不會出現死鎖問題。

直接上代碼:

SerialPort serialPort1 = new SerialPort(“COM5”, 115200, Parity.None, 8, StopBits.One); //初始化串口設置//定義委托public delegate void Displaydelegate(byte[] InputBuf);Byte[] OutputBuf = new Byte[8];public Displaydelegate disp_delegate;//接收數據委托disp_delegate = new Displaydelegate(DispUI);serialPort1.DataReceived += new SerialDataReceivedEventHandler(Comm_DataReceived);//串口讀取數據處理函數public void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e){Byte[] InputBuf = new Byte[8];try{serialPort1.Read(InputBuf, 0,6); //讀取緩沖區的數據,每次讀取6個字節的數據System.Threading.Thread.Sleep(100);this.BeginInvoke(disp_delegate, InputBuf);//disp_delegate是定義的委托事件,在委托事件中調用修改UI的程序}catch (TimeoutException ex) //超時處理{MessageBox.Show(ex.ToString());}}//更新UI界面public void DispUI(byte[] InputBuf){string str = System.Text.Encoding.Default.GetString(InputBuf);// Console.WriteLine(str);string strW = str.Substring(0, 2);//截取str的子串,從index=0開始截取長度為2的字符串int OutStrW = int.Parse(strW);string strS = str.Substring(2, 2);//截取str的子串,從index=2開始截取長度為2的字符串int OutStrS = int.Parse(strS);OutstrWen = (OutStrW - 4).ToString();textBox8.Text = strW;textBox9.Text = (OutStrW - 4).ToString();textBox10.Text = strS;textBox11.Text = (OutStrS - 10).ToString();}

以上這篇C# 串口接收數據中serialPort.close()死鎖的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广灵县| 新丰县| 正镶白旗| 当涂县| 邹城市| 石棉县| 杭州市| 旌德县| 剑阁县| 六枝特区| 原阳县| 娄烦县| 九龙城区| 都江堰市| 苍溪县| 九寨沟县| 临桂县| 抚远县| 福贡县| 镇沅| 大庆市| 沂源县| 白玉县| 石城县| 乌什县| 五家渠市| 铜川市| 武城县| 定州市| 和田县| 双桥区| 通州市| 盘锦市| 加查县| 望奎县| 东光县| 洪洞县| 攀枝花市| 海伦市| 华安县| 五莲县|