Dot-Net
.NET 4 串列埠 ObjectDisposedException 僅適用於 Windows 7
這是我在 .NET 2.0 中的串列埠類中一直遇到的問題。有人建議升級到 .NET 4 可以解決問題……而且幾乎在所有情況下都可以解決。
如果我使用 .NET 內置的串列埠類與 USB 轉串列適配器通信,並且在埠打開時意外拔出適配器,有時我會遇到未處理的異常:
Application: test.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.ObjectDisposedException Stack: at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) at System.StubHelpers.StubHelpers.SafeHandleAddRef(System.Runtime.InteropServices.SafeHandle, Boolean ByRef) at Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(Microsoft.Win32.SafeHandles.SafeFileHandle, System.Threading.NativeOverlapped*, Int32 ByRef, Boolean) at System.IO.Ports.SerialStream+EventLoopRunner.WaitForCommEvent() at System.Threading.ThreadHelper.ThreadStart_Context(System.Object) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.ThreadHelper.ThreadStart()同樣,大多數時候它工作正常。事實上,我什至無法在我自己的電腦上重現這個問題。這發生在我的一個朋友身上。有什麼辦法可以擷取這個錯誤嗎?
**編輯:**我能夠自己重現該行為。我現在正在試驗,但仍然對 .NET 4.0 中導致此錯誤的原因感到困惑。
**編輯 2:**這似乎只發生在 Windows 7 上。在 XP 上拔下和插入 USB 轉串口適配器效果很好。
微軟似乎不會很快修復這個錯誤,並且沒有好的解決方法。我花了一年多的時間斷斷續續地解決這個問題。
我的解決方案是使用第 3 方組件。在測試了 15+ 之後,我發現唯一真正有效的是 CommStudio。
免費快遞版在這裡: http ://www.componentsource.com/products/commstudio/downloads.html?rv=42917
將以下內容添加到 app.config
<runtime> <legacyUnhandledExceptionPolicy enabled="1"/> </runtime>對我有用。請參閱SerialPort 問題