ich habe bei folgendem Workflow das Problem, dass IowKitRead fehl schlägt. GetLastError liefert 87 (Win32Error: "Falscher Parameter"). Aus anderen Projekten ist mir 87 als "Sammelfehler" bei diverser IOArbeit bekannt. Was kann der Hintergrund hier sein?
Environment: .NET4, VS2010U, IOW24 V1.0.3.0, Eigene Verschaltung, Win7 x64, Output-Image: x86 (natürlich)
Was passiert?
- Ich habe eine Klasse, die den Zugriff auf den IOW24 kapselt. Beim ctor wird IowKitOpenDevice gerufen und Seriennummer, Productversion etc gelesen. IowKitCloseDevice wird im Dispose der Klasse aufgerufen und spielt in diesem Workflow keine Rolle.
-> Alles funktioniert wunderbar. - Aufruf der Methode "StartListeningAsync":
Hier wird ein WorkerThread erzeugt, der zunächst IowKitSetTimeout mit 500ms aufruft. Danach wird in einer Endlosschleife IowKitRead aufgerufen. Bei erfolgreichem Lesen wird ein Event erzeugt. Zusätzlich wird der Member "CancelRequest" geprüft und ggf. die Schleife und damit der Thread beendet.
-> Alles funkioniert wunderbar. Device wird ausgelesen. Events werden erzeugt. - Aufruf der Methode "StopListeningAsync":
Hier wird der Member "CancelRequest" gesetzt und gewartet, bis sich der Workerthread beendet.
-> Alles funktioniert wunderbar. Thread wird korrekt beendet. Programm ist im Idle-Betrieb. - Erneuter Aufruf o.g. Methode "StartListeningAsync":
Thread wird erzeugt, Timeout wirkt. Wenn sich jedoch der Input-Zustand am IOW ändert, wird nicht der Wert korrekt gelesen (so wie beim ersten Aufruf), sondern ein Fehler gemeldet.
-> GetLastError liefert 87 (Falscher Parameter)?!?!
Sonnige Grüße
eric4711