Dot-Net

.NET 4 串列埠 ObjectDisposedException 僅適用於 Windows 7

  • April 28, 2018

這是我在 .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 問題

引用自:https://stackoverflow.com/questions/3808885