我在使用串口的時候出現了兩個錯誤,基本上還屬於有機率才能觸發,第一個是已關閉Safe handle”的錯誤,第二個是由於線程退出或應用程序請求,已中止 I/O 操作。造成第一個錯誤的原因是在關閉串口前就關閉了線程,這樣就會出現這樣的錯誤。
不過經過在網上的查找資料發現,先關閉串口後關閉進程會出現第二種錯誤。
發生的原因應該就是串口關閉的時機的問題。在這裏糾結了半天,每次點擊停止監聽串口都會將整個程序退出。
於是經過嘗試發現,可以先將線程掛起,然後在關閉串口,再關閉線程,安裝這樣的順序不會出現錯誤,可能會有個小提示而已。
try { if (TRecieve.IsAlive) { TRecieve.Suspend(); } if (_serialPort != null) { if (_serialPort.IsOpen == true) { _serialPort.Close(); } } if (TRecieve != null) { TRecieve.Abort(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
這就是源代碼