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

时间:2009-07-28 15:33:48

标签: c# .net 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)

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

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

您可能知道嵌入的Windows XP非常具有可扩展性,您可以从1000个要包含的软件包中进行选择。

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

您是否已使用该命令在机器上测试过任何其他应用程序?您可能需要检查设备管理器是否系统正确识别了驱动程序。

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

希望有所帮助。

问候