Frage

Ich benutzen Pol-Display (E PO) in meinem PO c # application.I zwei großes Problem, dass hat, 1. Ich kann das Display nicht ganz klar. 2. Ich kann die Cursor-Position gesetzt.

     I used some dirty tricks to do these.But I am not satisfied with that code.The following code i used.

Code: -

class PoleDisplay : SerialPort
{
    private SerialPort srPort = null;

    public PoleDisplay()
    {
        try
        {
            srPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            if (!srPort.IsOpen) srPort.Open();
        }
        catch { }
    }

    ~PoleDisplay()
    {
        srPort.Close();
    }

    //To clear Display.....
    public void ClearDisplay()
    {
        srPort.Write("                    ");
        srPort.WriteLine("                    ");

    }

    //Display Function 
    //'line' 1 for First line and 0 For second line
    public void Display(string textToDisplay, int line)
    {
        if (line == 0)
            srPort.Write(textToDisplay);
        else
            srPort.WriteLine(textToDisplay);
    }

}  
War es hilfreich?

Lösung

Ihr Problem ist, dass Sie schreiben auf klare Linie 1 anrufen, und Writeline löschen Linie 2.

Das macht keinen Sinn. Der einzige Unterschied zwischen den Verfahren ist, daß ein Writeline Zeilenumbruch am Ende hinzufügt. Alles, was Sie wirklich tun, ist dies die Ausgabe dieser Zeichenfolge:

  "                                  "\r\n

Ohne die Marke der Pols Anzeige wissen Sie verwenden, kann ich Ihnen nicht sagen, den richtigen Weg, es zu tun, aber die Art, wie Sie versuchen, es zu tun, wird nie funktionieren. Die meisten Terminals akzeptieren spezielle Zeichencodes den Cursor zu bewegen, oder die Anzeige löschen. Haben Sie eine Referenz für das Terminal gefunden mit dem Sie arbeiten? Die meisten Displays wird klar, wenn man sie CHR (12) zu senden.

Alles, was beiseite, es ein großes Problem mit Ihrer Klasse Design. Sie sollten sich nicht in C # zu freien Ressourcen auf Destruktoren verlassen.

In C # wird der Destruktor aufgerufen, wenn der Garbage Collector das Objekt sammelt, so gibt es keine deterministische Art und Weise zu wissen, wann die Ressource (in diesem Fall ein Com-Port), wird gesammelt und geschlossen werden.

Stattdessen implementieren die Schnittstelle IDisposable auf Ihrer Klasse.

Dies erfordert, dass Sie eine Dispose-Methode Ihrer Klasse hinzuzufügen. Dies würde den gleichen Zweck wie Ihr aktuellen destructor dienen.

, dass Dadurch können Sie ein in Sprache-Funktion in C # gebaut nutzen Sie Ihre Ressourcen freizugeben, wenn das Objekt den Gültigkeitsbereich verlässt.

using (PoleDisplay p = new PoleDisplay())
{
     // Do Stuff with p
}
// When the focus has left the using block, Dispose() will be called on p.

Andere Tipps

Hex-Code 0C senden den Bildschirm zu löschen, es funktioniert für die meisten Displays

Hier ist ein Codebeispiel:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top