Frage

Weiß jemand, der eine gute Klasse (hoffentlich kostenlos), um die .net Serialport-Klasse zu ersetzen? Es macht mir Probleme und ich brauche eine, die etwas flexibler ist.

Sehen Sie meine anderen Thread über meine Probleme , aber im Wesentlichen muss ich die IOCTL_SERIAL_SET_DTR zu unterdrücken und IOCTL_SERIAL_CLR_DTR Befehle von ausgegeben wird, wenn ich den Port öffnen, so brauche ich etwas flexibler als die Klasse von .NET Framework bereitgestellt.

War es hilfreich?

Lösung

Vor einigen Jahren habe ich OpenNETCF.IO.Serial vor den Serien Unterstützung .net hinzugefügt wurde. Es ist für den kompakten Rahmen, aber ich benutzte es für beide kompakte Geräte und regelmäßige Windows-Anwendungen. Sie erhalten den Quellcode, so dass Sie es selbst ändern kann das ist, was ich getan habe.

Es schafft im Grunde einen c # Wrapper um die serielle Funktion aus kernel32.dll importiert.

Sie möchten vielleicht auch einen Blick auf haben, wie eine serielle Schnittstelle zu erfassen, die das USB-Kabel verschwindet, weil bekommt unplugged

Hier ist der Code, den ich es zu nennen pflegte

     using OpenNETCF.IO.Serial;

     public static Port port;
     private DetailedPortSettings portSettings;
     private Mutex UpdateBusy = new Mutex();

     // create the port
     try
     {
        // create the port settings
        portSettings = new HandshakeNone();
        portSettings.BasicSettings.BaudRate=BaudRates.CBR_9600;

        // create a default port on COM3 with no handshaking
        port = new Port("COM3:", portSettings);

        // define an event handler
        port.DataReceived +=new Port.CommEvent(port_DataReceived);

        port.RThreshold = 1;    
        port.InputLen = 0;      
        port.SThreshold = 1;    
        try
        {
           port.Open();
        }
        catch
        {
           port.Close();
        }
     }
     catch
     {
        port.Close();
     }

     private void port_DataReceived()
     {

        // since RThreshold = 1, we get an event for every character
        byte[] inputData = port.Input;

        // do something with the data
        // note that this is called from a read thread so you should 
        // protect any data pass from here to the main thread using mutex
        // don't forget the use the mutex in the main thread as well
        UpdateBusy.WaitOne();
        // copy data to another data structure
        UpdateBusy.ReleaseMutex();

     }

     private void port_SendBuff()
     {
        byte[] outputData = new byte[esize];
        crc=0xffff;
        j=0;
        outputData[j++]=FS;
        //  .. more code to fill up buff
        outputData[j++]=FS;
        // number of chars sent is determined by size of outputData
        port.Output = outputData;
     }

     // code to close port
     if (port.IsOpen)
     {
        port.Close();
     }
     port.Dispose();

Andere Tipps

Ich habe nicht versucht, versucht, dies aber vielleicht können Sie:

  • Holen Sie sich den Quellcode von System.IO.Ports.SerialPort unter Verwendung von Reflector oder ähnlich
  • Ändern Sie diesen Quellcode wie Sie möchten
  • Rebuilt die modifizierte Kopie in einem anderen Namespace, und es verwenden,

Der Standard .NET Serialport ist keine versiegelte Klasse - eine Chance, Sie das Verhalten, das Sie von einer Unterklasse erhalten, erleben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top