Ich arbeite an einem Projekt, das mehrere RFID-Lesegeräte gleichzeitig überwachen muss. Der RFID-Leser verfügt über eine DLL-Datei, die Methoden zur Interaktion mit ihm offen legt. Eine Methode besteht darin, eine Verbindung zu ihr zu öffnen. Wenn ich die statische DLL anrufe, um eine Verbindung zu einem einzelnen RFID-Lesegerät herzustellen, funktioniert das problemlos. Wenn ich mehrere Instanzen meiner App benutze, rufen sie alle die statische DLL auf und verbinden sich mit verschiedenen RFID-Lesegeräten. Allerdings muss ich nur eine einzige Instanz meiner Hauptanwendung ausführen und dann einzelne Threads mit einzelnen RFID-Lesegeräten verbinden. Aber wenn ich das tue, ist die erste Verbindung erfolgreich, aber alle anderen Threads können die DLL nicht aufrufen, da ich annehme, dass sie sich in einem gemeinsamen Speicherbereich befindet und daher vom ersten Thread beansprucht wird. Wie kann ich dieses Problem lösen?Statische DLL für RFID Reader aus mehreren Threads aufrufen
Hier ist die DoWork fucntion die
durch Thread.Start genanntpublic void DoWork()
{
__parent.UpdateLog(ReaderIP + ": working.");
int openresult = 0;
int frmcomportindex = 0;
int fOpenComIndex;
byte fComAdr = Convert.ToByte("FF", 16); // $FF
//this line works fine for the first thread adn fails for all following threads
// but works fine if I run multiple instances of my app and get each to connect to a single RFID reader
openresult = StaticClassReaderB.OpenNetPort(ReaderPort, ReaderIP, ref fComAdr, ref frmcomportindex);
fOpenComIndex = frmcomportindex;
Überprüfen Sie diese: https://msdn.microsoft.com/en-us/library/system.threading.thread.beginthreadaffinity(v=vs.110).aspx – Fruchtzwerg