C#シリアルポートがシャットダウンされましたSafe handle
1291 ワード
今日、私の通信フレームワークを使用して、シリアル通信ベースのクライアントを作成するときに、このようなバグが発生しました.
このバグが発生すると、プログラムは直接クラッシュし、エラーコードの位置を追跡できません.
テストを経て、問題を探します.1つの関数内でSerialPortを用いてシリアル通信インスタンスが作成された後,そのインスタンスは他のコンテナにキャッシュされず,上記クラッシュBUGの発生を招いたことが分かった.
その後、コードを修正し、このインスタンスをグローバル変数List<通信クライアント>のセットに入れ、BUGは解決される.
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は解決される.