Ich erstelle eine Anwendung, die über den USB / RS232-Konverter FT2232H mit dem Gerät kommuniziert. Für die Kommunikation verwende ich die FTD2XX_NET.dll-Bibliothek von der FTDI-Website.
Ich benutze zwei Threads:
%Vor%
%Vor%
%Vor% Die ftdiDevice.Write-Funktion legt nicht auf, wenn ich folgende Zeile kommentiere: %Vor%
Ein paar Dinge:
Überprüfen Sie, ob Ihr Leseaufruf blockiert ist. Ist dies der Fall, können Sie möglicherweise Write nicht aufrufen, während der Read blockiert ist und auf eine Antwort wartet. Ihre API-Dokumentation enthält möglicherweise weitere Details dazu.
Einige APIs unterstützen mehrere Threads nicht sehr gut, selbst wenn der Zugriff synchronisiert wird. Wenn dies der Fall ist, können Sie ein Design verwenden, bei dem Sie Ihre Schreibbefehle an Ihren Kommunikations-Thread delegieren. Wenn ich dieses Muster in der Vergangenheit verwendet habe, stehe ich normalerweise eine Art der Befehlsklasse mit den Informationen an, die ich schreiben möchte, und benutze entweder eine Threading-Signalklasse, um meinen 'command'-Methoden zu erlauben, etwas zu blockieren oder zu liefern asynchrone Benachrichtigung.
Beim Auschecken der API sieht es so aus, als könnte der Treiber einen COM-Port emulieren. Ich sehe die GetComPort () Methode, die eine "COMx" Zeichenkette zurückgibt. Das macht es sehr wahrscheinlich, dass Sie die System.IO.Ports.SerialPort-Klasse verwenden können. Was bereits versucht, was Ihr Wrapper zu tun versucht, unterstützt ein DataReceived-Ereignis. Einen Versuch wert.
Tags und Links c# multithreading hardware-interface