用C#撰寫的wince串口通信程式基本大功告成了,與之前用API函式和執行緒來做串口通信不同,這次直接使用SerialPort控制元件來做,原本以為使用控制元件做會簡單和方便許多,沒成想,還遇到了很多麻煩,
通信協議決議判斷、控制元件資料更新顯示等等都沒有給我造成什么障礙,卻偏偏在“關閉串口”這個地方卡殼了,
在網上看了很多帖子,發現遇到這一問題的人還比較多,按他們的建議和方法都試過了,比如,加close和dataReceive接收標志的方式,或者close之后再Dispose釋放資源,或者Application.DoEvents()處理完所有資訊再close.............試了能想到的所有辦法,最終都試驗失敗,該死機還是會死機,只是之前,第一次關機就會卡住不動,現在是多次重復開關機才會死機,雖然這些辦法有效果有改善,但是并沒有解決問題,
在這一問題上停滯了2天之后,今天終于找到了解決問題的辦法!
原本串口接收事件中含有invoke來執行委托:Invoke(............. , ...........);
這種方式會阻塞當前的執行緒,會阻塞串口的關閉,
將invoke改為BeginInvoke來執行委托:BeginInvoke(............. , ...........);
就不會出現關閉串口的時候死機、卡住不動的情況了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294291.html
標籤:其他
