Windows XP嵌入式版本上System.IO.IOException的原因是什么?

Pri*_*his 4 .net c# serial-port

我在Windows XP embadded版本上运行.Net 3.5应用程序.此应用程序通过串行(COM)端口写入和读取一些数据.该应用程序在我的笔记本电脑(Windows XP Professional)上工作正常,但在Windows XP嵌入式上没有.我一直收到这个错误:

System.IO.IOException:由于线程退出或应用程序请求,I/O操作已中止.

可能是什么造成的呢?

一些额外的信息:阅读,我正在使用ReadExisting而不是Readline.在阅读之前,我也确保端口也是打开的.

System.IO.IOException: The I/O operation has been aborted because of either a thread exit or an application request.
at System.IO.Ports.SerialStream.EndRead(IAsyncResult asyncResult)
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count)
at System.IO.Ports.SerialPort.ReadExisting()
at ScalesApp.Scales.handleDataReceived(Object sender, SerialDataReceivedEventArgs e)
at System.IO.Ports.SerialPort.CatchReceivedEvents(Object src, SerialDataReceivedEventArgs e)
at System.IO.Ports.SerialStream.EventLoopRunner.CallReceiveEvents(Object state)
at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
Run Code Online (Sandbox Code Playgroud)

Zac*_*Saw 8

问题是在SetCommState的DCB中启用了fAbortOnError,这解释了SerialPort对象抛出的大多数IOExceptions.一些PC /手持设备具有UART,默认情况下启用错误标志中止 - 因此串行端口的init例程必须清除它(Microsoft忽略了这一点).SerialPort对象的设计并未考虑fAbortOnError.

我最近写了一篇长篇文章来更详细地解释这个问题(如果你有兴趣,请看这个).