2009-07-28 65 views
4

我在Windows XP embadded版本上运行.net 3.5应用程序。此应用程序通过串行(COM)端口写入和读取一些数据。该应用程序可以在我的笔记本电脑(Windows XP Professional)上正常工作,但不适用于嵌入式Windows XP。我一直得到这个错误:Windows XP Embedded版本中System.IO.IOException的原因是什么?

System.IO.IOException: The I/O operation has been aborted because of either a thread exit or an application request.

什么可能是造成它?

一些额外的信息:阅读,我使用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) 
+0

你能够使用其他应用程序(如超级终端)的串行端口吗? – Gabe 2009-07-28 16:02:13

+0

是的,我可以。我应该提到这个问题,我的应用程序实际上可以通过串口进行通信,但一段时间后它会得到异常。 – Prithis 2009-07-28 16:12:38

回答

0

这严重依赖于windows嵌入式配置。

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

曾经在公司我们遇到了蜂鸣声不会从citrix会话转发到本地客户端的问题。经过一些试验和错误之后,我们发现我们忘记了“哔哔声”。是,存在; o)

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

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

希望有帮助。

问候

8

的问题是,fAbortOnError在SetCommState的DCB,这也解释了大多数通过一个串口对象抛出的IOExceptions启用。某些PC /手持设备具有UART,默认情况下允许在错误标志上放弃 - 因此,串行端口的初始化程序清除它是非常必要的(微软忽视这一点)。 SerialPort对象并未设计为启用fAbortOnError。

我最近写了一篇很长的文章来更详细地解释这个问题(如果你感兴趣的话,可以参考see this)。