Domanda

Ho usato display a torretta (E POS) nei miei POS c # application.I hanno due dei maggiori problemi in quanto, 1. Non riesco a cancellare perfettamente il display. 2. Non è possibile impostare la posizione del cursore.

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

Codice: -

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);
    }

}  
È stato utile?

Soluzione

Il problema è che si sta chiamando Scrivici linea chiara 1, e WriteLine di cancellare la linea 2.

Questo non ha alcun senso. L'unica differenza tra i metodi è che WriteLine aggiunge un'interruzione di linea fino alla fine. Tutto quello che sta realmente facendo è questo l'output di questa stringa:

  "                                  "\r\n

Senza conoscere il marchio del display polo che si sta utilizzando, non posso dirvi il modo corretto di farlo, ma il modo in cui si sta cercando di fare non funzionerà mai. La maggior parte dei terminali accettano i codici di carattere speciali per spostare il cursore, o azzerare il display. Hai trovato un punto di riferimento per il terminale si sta lavorando? La maggior parte dei display sarà chiaro se si inviano loro CHR (12).

Tutto ciò a parte, c'è un grosso problema con il vostro disegno di classe. Non si dovrebbe mai fare affidamento su distruttori di liberare risorse in C #.

In C #, il distruttore verrà chiamato quando il garbage collector raccoglie l'oggetto, quindi non c'è modo deterministico di sapere quando la risorsa (in questo caso una porta Com), saranno raccolti e chiusi.

Al contrario, implementare l'interfaccia IDisposable sulla tua classe.

Questo richiede di aggiungere un metodo Dispose alla classe. Ciò servirebbe lo stesso scopo come distruttore corrente.

Per fare ciò, è possibile utilizzare una costruito in funzione di linguaggio C # per liberare le risorse quando l'oggetto va fuori di portata.

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

Altri suggerimenti

Invia codice esadecimale 0 ° C per cancellare lo schermo, funziona per la maggior parte dei display

Ecco un esempio di codice:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top