コンピュータは、物理的なCOM1を介して測定デバイスに接続されています。私はシリアルポートを開き、私が生きていることをデバイスに伝え、時々デバイスがデータを送信するという単純なフォームを持っています。(数分ごと)
Thread _readThread = new Thread(Read);
SerialPort _serialPort = new SerialPort("COM1", 9600);
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.None;
_serialPort.DtrEnable = true;
_serialPort.Open();
_readThread.Start();
_serialPort.Write("#listening");
読み取り機能(機能します):
public void Read()
{
string message = _serialPort.ReadLine();
}
約1分後、アプリケーションがクラッシュします(デバッグ中であっても)。ObjectDisposedExceptionを報告します(基になるストリームに対して?)。このメッセージは、SafeHandleが閉じられたことを示しています。スタックstraceは以下のとおりです。
Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile、NativeOverlapped lpOverlapped、Int32&lpNumberOfBytesTransferred、Boolean bWait)at System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()at System.Threading.ThreadHelper.ThreadStart_Context System.Threading.ThreadHelper.ThreadStart()*でのThreading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)
何か案は?この問題は広く報告されていますが、通常、デバイスがPCから物理的に切り離されていることが関係しています。