C#シリアルポートがシャットダウンされましたSafe handle

1291 ワード

今日、私の通信フレームワークを使用して、シリアル通信ベースのクライアントを作成するときに、このようなバグが発生しました.
    System.ObjectDisposedException
  Message=    Safe handle
  Source=mscorlib
  ObjectName=""
  StackTrace:
         System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
         System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
         Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile, NativeOverlapped* lpOverlapped, Int32& lpNumberOfBytesTransferred, Boolean bWait)
         System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
         System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
         System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

このバグが発生すると、プログラムは直接クラッシュし、エラーコードの位置を追跡できません.
テストを経て、問題を探します.1つの関数内でSerialPortを用いてシリアル通信インスタンスが作成された後,そのインスタンスは他のコンテナにキャッシュされず,上記クラッシュBUGの発生を招いたことが分かった.
その後、コードを修正し、このインスタンスをグローバル変数List<通信クライアント>のセットに入れ、BUGは解決される.