国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# 串口接收數據中serialPort.close()死鎖的實例

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

2022-02-13 15:16隨心小寶 C#

下面小編就為大家分享一篇C# 串口接收數據中serialPort.close()死鎖的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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()死鎖的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/hexiaobao/archive/2017/11/28/7909103.html

延伸 · 閱讀

精彩推薦
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
主站蜘蛛池模板: 亚洲久久 | 欧洲精品在线视频 | 自拍视频在线观看 | 日韩精品一区二区三区第95 | 欧美视频二区 | 亚洲精品综合中文字幕 | 久久网站热最新地址 | 日韩精品小视频 | 亚洲免费观看视频 | 成人3d动漫一区二区三区91 | 激情久久久久 | 91麻豆精品国产91久久久资源速度 | 欧美日韩91 | 国产精品一区二区三区免费 | 91亚洲精品一区 | www.久久精品 | 国产精品久久久久久久久久久久| 久久久久久99| 中文字幕在线三区 | 中文字幕视频播放 | 国产日韩精品久久 | 国产一区二区三区四区 | 国产资源在线视频 | 亚洲精品视频免费观看 | 日韩成人精品视频 | 91精品视频导航 | 久久手机视频 | 国产精品久久久久久久久 | 一区二区日本 | 国产精品自产拍在线观看 | 四房婷婷 | 国产高清在线观看 | 亚洲欧美一区二区三区四区 | 欧美在线视频一区 | 日韩欧美中字 | 69久久久久久 | 看黄免费 | 国产成人片 | 一级电影在线观看 | 一区二区三区在线看 | 欧美一级内谢 |