2009-07-28 1 views
4

Ich verwende eine .Net 3.5-Anwendung in der Windows XP-Version. Diese Anwendung schreibt und liest einige Daten über den seriellen (COM) Port. Die Anwendung funktioniert auf meinem Laptop (Windows XP Professional), aber nicht auf Windows XP Embedded. Ich bekomme diesen Fehler immer wieder:Was ist der Grund für System.IO.IOException unter Windows XP Embedded Version?

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

Was könnte das verursachen?

Einige zusätzliche Informationen: um zu lesen, verwende ich ReadExisting und nicht Readline. Auch vor dem Lesen sorge ich dafür, dass der Port auch offen ist.

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

können Sie die serielle Schnittstelle von anderen Anwendungen (wie Hyperterminal) verwenden? – Gabe

+0

Ja kann ich. Ich sollte das Problem erwähnen, dass meine Anwendung tatsächlich über die serielle Schnittstelle kommunizieren kann, aber es wird die Ausnahme nach einiger Zeit. – Prithis

+0

Besser etwas Code zeigen. –

Antwort

0

Dies hängt stark von Ihrer Windows Embedded-Konfiguration ab.

Sie wissen vielleicht, dass Windows XP Embedded ist sehr skalierbar und Sie können aus 1000s von Paketen wählen, die Sie einschließen möchten.

einmal in der Firma hatten wir das Problem, dass Pieptöne nicht von Citrix-Sitzung an den lokalen Client weitergeleitet werden. Nach einigem Ausprobieren fanden wir heraus, dass wir den Piep-Treiber vergessen hatten. yep, das gibt es; o)

haben Sie bereits eine andere Anwendung auf der Maschine über den COM-Port getestet? Vielleicht möchten Sie in den Geräte-Manager einchecken, ob der Treiber vom System korrekt erkannt wird.

Wenn Sie die Option in Ihrem Control Panel nicht verfügbar haben, müssen Sie Sysdm.cpl vom System32-Ordner eines anderen Computers auf den Ihres eingebetteten Systems kopieren.

hoffe das hilft.

Grüße

+0

Nun kann meine Anwendung für einige Zeit kommunizieren, dann bekomme ich den Fehler, also nehme ich an, dass alles in Ordnung sein sollte. Aber ich werde das überprüfen. – Prithis

+1

ein sehr böses Problem und es ist fast unmöglich, dies zu debuggen. aber wenn Sie in der Lage sind zu kommunizieren, könnte das Problem anderswo liegen ... Haben Sie Ereignisprotokoll für Nachrichten, die protokolliert wurden? wenn ja, bitte posten Sie einige von ihnen .... – Atmocreations

+0

posted bitte überprüfen Sie oben. – Prithis

8

Das Problem ist, dass die fAbortOnError in SetCommState des DCB aktiviert ist, die durch das Objekt geworfen Serialport für die meisten der IOExceptions erklärt. Einige PCs/Handhelds verfügen über UARTs, die standardmäßig das Flag "Abbruch bei Fehler" aktivieren. Daher muss die Init-Routine des seriellen Ports unbedingt gelöscht werden (was Microsoft nicht getan hat). Das SerialPort-Objekt wurde nicht unter Berücksichtigung von fAbortOnError entwickelt.

Ich schrieb vor kurzem einen langen Artikel, um dies ausführlicher zu erklären (see this, wenn Sie interessiert sind).

Verwandte Themen