計算機通過物理COM1連接到測量設備。我有一個簡單的表單,我打開一個串口,告訴設備我還活着,有時候設備發送數據。 (每隔幾分鐘)打開的SerialPort崩潰C#應用程序
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已關閉。堆strace的低於:
在Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle HFILE,NativeOverlapped lpOverlapped的,的Int32 &指向lpNumberOfBytesTransferred,布爾BWAIT) 在System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent() 在System.Threading.ThreadHelper.ThreadStart_Context在System.Threading.ExecutionContext.Run(對象狀態) 在System.Threading.ThreadHelper.ThreadStart()(ExecutionContext中的ExecutionContext,ContextCallback回調,對象狀態) *
任何想法?這個問題被廣泛報道,但通常涉及與個人電腦脫離的設備。
我知道SerialPort類在Mono上有一些問題。你在使用Mono還是MS .NET? – Skurmedel 2009-04-28 11:32:22
MS .NET Framework 3.5 SP1 – 2009-04-28 11:34:15
可能不是解決方案,但您打開之前調用Write。 – Skurmedel 2009-04-28 11:34:38