2009-07-28 10 views
4

Je cours une application de .Net 3.5 sur la version embadded de Windows XP. Cette application écrit et lit des données sur le port série (COM). L'application fonctionne très bien sur mon ordinateur portable (Windows XP Professionnel) mais pas sur Windows XP intégré. Je continue à obtenir cette erreur:Quelle est la cause de System.IO.IOException sur la version intégrée de Windows XP?

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

Quelle a été la cause?

Quelques informations supplémentaires: pour lire, j'utilise ReadExisting et non Readline. Aussi avant de lire je m'assure que le port est ouvert aussi.

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

pouvez-vous utiliser le port série d'autres applications (comme hyperterminal)? – Gabe

+0

Oui, je peux. Je devrais mentionner le problème que mon application peut effectivement communiquer sur le port série, mais il obtient l'exception après un certain temps. – Prithis

+0

Mieux montrer une partie du code. –

Répondre

0

Cela dépend fortement de votre configuration Windows intégrée.

Vous savez peut-être que Windows xp embedded est très évolutif et que vous pouvez choisir parmi les milliers de packages que vous souhaitez inclure.

Une fois dans l'entreprise, nous avons eu le problème que les bips ne sont pas transférés de la session citrix vers le client local. après quelques essais et erreurs, nous avons découvert que nous avons oublié le "bip-pilote". oui, cela existe; o)

Avez-vous déjà testé une autre application sur la machine en utilisant le port COM? vous pouvez vérifier dans le gestionnaire de périphériques si le pilote est correctement reconnu par le système. Si vous n'avez pas l'option disponible dans votre panneau de configuration, vous devez copier Sysdm.cpl du dossier system32 d'un autre ordinateur vers celui de votre système embarqué.

espérons que cela aide.

concernant

+0

Eh bien, mon application peut communiquer pendant un certain temps, puis je reçois l'erreur, donc je suppose que tout devrait être en place. Cependant, je vais vérifier cela. – Prithis

+1

un très vilain problème et il est presque impossible de déboguer cela. mais si vous êtes en mesure de communiquer, le problème pourrait se poser ailleurs ... avez-vous vérifié eventlog pour les messages qui ont été enregistrés? Si oui, s'il vous plaît poster certains d'entre eux .... – Atmocreations

+0

posté s'il vous plaît vérifier ci-dessus. – Prithis

8

Le problème est que le fAbortOnError est activé dans DCB SetCommState, ce qui explique la plupart des IOExceptions lancées par l'objet SerialPort. Certains PC/ordinateurs de poche ont des UART qui activent l'indicateur d'abandon sur erreur par défaut - il est donc impératif que la routine d'initialisation d'un port série l'efface (ce que Microsoft a négligé de faire). L'objet SerialPort n'a pas été conçu avec fAbortOnError activé.

J'ai écrit un long article récemment pour expliquer cela plus en détail (see this si vous êtes intéressé).

Questions connexes