2009-07-28 64 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)。