2009-07-28 15 views
4

私はWindows XP embaddedバージョンで.Net 3.5アプリケーションを実行しています。このアプリケーションは、シリアル(COM)ポートを介していくつかのデータの書き込みと読み取りを行います。アプリケーションは私のラップトップ(Windows XP Professional)では正常に動作しますが、Windows XPには組み込まれていません。このエラーが発生し続ける:Windows XPの埋め込みバージョンで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

+0

はいできます。私は問題を言及する必要があります私のアプリケーションは実際にシリアルポート上で通信することができますが、それはしばらくしてから例外を取得します。 – Prithis

+0

コードの一部をよりうまく表示できます。 –

答えて

0

これは、Windowsの組み込み構成によって大きく異なります。

埋め込まれたウィンドウxpは非常にスケーラブルであり、含めるパッケージを1000個から選択できます。

社内では、ビープ音がCitrixセッションからローカルクライアントに転送されないという問題がありました。いくつかの試行錯誤の後、私たちは "ビープドライバ"を忘れていることを知りました。はい、存在します; o)

comポートを使用してマシン上の他のアプリケーションを既にテストしましたか?ドライバがシステムによって正しく認識されているかどうかをデバイスマネージャにチェックインすることをお勧めします。

コントロールパネルで使用できるオプションがない場合、別のコンピュータのsystem32フォルダからSysdm.cplを組み込みシステムのものにコピーする必要があります。

希望するものがあります。

よろしく

+0

まあ私のアプリケーションはしばらくの間通信することができますので、私はエラーが発生するので、everthingがあると仮定します。しかし、私はそれを再確認します。 – Prithis

+1

非常に厄介な問題で、これをデバッグすることはほとんど不可能です。 あなたが通信できれば、問題は別の場所にある可能性があります...ログに記録されたメッセージのeventlogをチェックしましたか?はいの場合は、それらのいくつかを投稿してください.... – Atmocreations

+0

投稿は上記を確認してください。 – Prithis

8

問題はfAbortOnErrorがSERIALPORTオブジェクトによってスローIOExceptionsのほとんどの説明のSetCommStateのDCBで有効になっていることです。一部のPC /ハンドヘルドには、デフォルトでエラーフラグをアボートできるUARTがあります。シリアルポートの初期ルーチンがクリアする必要があります(マイクロソフトはこれを無視しました)。 SerialPortオブジェクトは、fAbortOnErrorを念頭に置いて設計されていませんでした。

私はこれをより詳細に説明するために長い記事を最近書きました(興味があればsee this)。

関連する問題