
程式在我的win10電腦上一切正常,打包成安裝包在另一臺win7電腦上時不時會閃退,且捕捉不到任何例外。在日志中發現上圖所示的錯誤。
但是我又找了一臺win7電腦,跑了將近一個月。沒出任何狀況。(程式對應的.Net 3.5版本)實在搞不定了,求大神賜教。
uj5u.com熱心網友回復:
串口本身的穩定性問題,可能是硬體也可能是軟體問題,建議用替換法嘗試問題所在uj5u.com熱心網友回復:
硬體的話,串口線和網關都是同一個(我這是串口接收網關資料,只在本地運行)。這也會有什么隱患嗎?
uj5u.com熱心網友回復:
錯誤提示資訊不是很清楚嗎?串口在讀取資料程序中,意外關閉了,
try...catch...處理下
uj5u.com熱心網友回復:
你這個應該是用的多執行緒并行吧,如果是純代碼問題可能是在一個執行緒中關閉了串口,然后再另一個執行緒中又呼叫的這個串口,比如使用串口收發資料,我也有遇到過這種問題,我是因為要做一個自動搜尋串口的功能,用定時器,然后再定時器事件中關閉串口(結果單步執行代碼的時候又跑到另一個執行緒中去執行串口接收資料,而不是執行完定時器事件再跑回原來的執行緒),然后就報出埠被關閉的例外,而且此例外出現頻率很高,這個例外應該是能捕捉到的,我的解決方法是在使用串口前加一個if(!scom.IsOpen){return;},避免掉這個例外導致程式崩潰,然后一直回圈直到串口開啟在接著收發串口命令。但是這樣子也只是降低了“埠被關閉”這個例外的出現概率,還是會出現這個問題的,只是因為我捕捉了這個例外所以程式不閃退。該怎么完美解決我也不知道。
你要是無法定位這個例外,那你可以在整個串口通訊事件外加一個try{}catch{}
但是我看你這個例外報告顯示例外就在get_BytesToRead()方法里面吧
uj5u.com熱心網友回復:
確實是多執行緒并行,我也是自動搜尋串口,但在找到正確串口后就將發送指令的執行緒關閉。此后串口只接收資料,然后譯碼進佇列。
而且程式是在運行一段時間后出現埠被關閉例外,此時發送指令的執行緒已經被關閉。只有接收執行緒,所以應該不會是您之前遇到的問題。
uj5u.com熱心網友回復:
您的意思是,捕捉到錯誤后,在catch陳述句中將串口重新打開嗎?這樣會不會有些治標不治本?
uj5u.com熱心網友回復:
我是用的定時器并行,在一個串口失敗之后關閉這個串口然后去打開下一個串口,就在這個關閉打開之間產生了例外,然后例外的位置是在scomm.read();串口接收命令的地方,可能我們的問題不一樣,不過吧我覺得只要是用串口收發都會有這個例外,而不是說只有接識訓者發送才會,3#的那個方法治標不治本,但是也是個應急的好辦法
uj5u.com熱心網友回復:
try...catch確實是不治本
但是可以防止軟體崩潰退出呀
正確的流程是:
每次操作判斷狀態,如果正常則發送資料,如果例外則發起連接,連接正常再繼續后續操作。
在try...catch中置狀態flag
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/31290.html
標籤:C#
上一篇:win10 下media player沒法安裝,誰有辦法
下一篇:碰到個奇怪的問題
