计算机通过物理 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();
}
大约一分钟后,应用程序崩溃(即使在调试时)。它报告一个 ObjectDisposedException (对于底层流?)。该消息表明 SafeHandle 已关闭。堆栈跟踪如下:
在 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. System.Threading.ThreadHelper.ThreadStart() 处的 Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态)*
有任何想法吗?该问题被广泛报道,但通常涉及设备与 PC 物理分离。