Laden...

Threads: Gibt es Unterschiede zwischen Windows 8 / Windows XP?

Erstellt von ShardZero vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.572 Views
Thema geschlossen
S
ShardZero Themenstarter:in
7 Beiträge seit 2013
vor 10 Jahren
Threads: Gibt es Unterschiede zwischen Windows 8 / Windows XP?

Hallo,

Ich habe eine Programm geschrieben, bei dem ein Thread im Hintergrund die Serielle Schnittstelle abfragt, ob auf einem Transponder-Lesegerät, ein RFID-Chip liegt.
Das Programm funktioniert einwandfrei unter Windows 8.
Nun habe ich das Programm auf einem Windows XP Rechner installiert, und schon arbeitet es anders.
Normal wird der Thread angehalten, wenn ein Transponder gefunden wurde, und dann wird per Invoke eine Methode im Main Thread aufgerufen.
Aber auf dem Windows XP Rechner scheint er den Thread nicht anzuhalten. d.h. er invoked, aber der Thread scheint weiterhin zu laufen.

Sind irgendwelche Unterschiede beim Threading mit Windows XP und Windows 8 bekannt?

Wäre super wenn mir da jemand helfen könnte, stehe ein bisschen aufm Schlauch.

S
ShardZero Themenstarter:in
7 Beiträge seit 2013
vor 10 Jahren

Oder kann es an Unterschieden zwischen 32 und 64 Bit Betriebssystemen liegen?

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo ShardZero,

direkt kann ich dir leider nicht helfen, aber ob es an 32/64 bit liegt könntest du probieren indem die Anwendung explizit als x86 kompiliert wird. Das lässt sich über den "Configuration Manager" in VS einstellen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

C
168 Beiträge seit 2010
vor 10 Jahren

wie beendest du den den Thread?

Ich hoffe nicht mit .Abort().

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo ShardZero,

siehe [FAQ] Programm läuft in anderer Umgebung nicht (richtig).

Control.Invoke sollte den aufrufenden Thread auf beiden Systemen anhalten, bis die delegierte Methode vom GUI-Thread komplett durchgelaufen ist.

herbivore

S
ShardZero Themenstarter:in
7 Beiträge seit 2013
vor 10 Jahren

Guten Morgen,

schonmal vielen Dank für die Antworten, werde das gleich direkt mal testen, und mir den Link angucken.

Ich beende den Thread, indem ich eine volatile bool Variable auf true setze, und dadurch im Thread eine while schleife beendet wird.

Ich Invoke mit "BeginInvoke" und übergebe ein Byte-Array und eine bool Variable.

16.835 Beiträge seit 2008
vor 10 Jahren

Was hast Du denn für einen Reader?
Über System.IO.Ports und COM solltest Du eine Verbindung zum Reader aufbauen können. Anschließend via Event über einen neuen Chip informiert werden - nix abfragen.

Gibt auch teilweise Projekte, die man direkt nutzen kann (LibLogicalAccess); zudem müsste es wege direkt über Win32 geben.
Edit: WinSCard nennt sich die Win32 Schnittstelle.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo ShardZero,

eine ungünstige und wohl auch unnötige Konstruktion. Wenn der Worker-Thread auf den GUI-Thread warten soll, dann sollte man Control.Invoke und gerade nicht Control.BeginInvoke verwenden.

herbivore

S
ShardZero Themenstarter:in
7 Beiträge seit 2013
vor 10 Jahren

Okay, vielen Dank, das werde ich dann direkt mal ändern.

Mit der Verbindung zum Reader gibt es keine Probleme, das funktioniert alles.

S
ShardZero Themenstarter:in
7 Beiträge seit 2013
vor 10 Jahren

So, das Problem ist behoben 😃
es lag anscheinend wirklich and BeginInvoke.

Vielen Dank an alle für die schnelle Hilfe.

Thema geschlossen