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

我在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) 

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

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

这严重依赖于您的Windows嵌入式配置。

您可能知道windows xp embedded具有很高的可扩展性,您可以从1000个要包含的软件包中进行选择。

一旦进入公司,我们就遇到了蜂鸣声没有从Citrix会话转发到本地客户端的问题。 经过一些反复试验,我们发现我们忘记了“哔哔”。 是的,存在; o)

你已经使用com-port测试了机器上的任何其他应用程序吗? 您可能需要检查设备管理器是否系统正确识别了驱动程序。

如果您的控制面板中没有该选项,则需要将Sysdm.cpl从另一台计算机的system32文件夹复制到嵌入式系统上的文件夹。

希望有所帮助。

问候