Pregunta

Me usado pantalla polos (E POS) en mis POS C # application.I tienen dos grandes problemas en que, 1. No puedo borrar la pantalla perfectamente. 2. No puedo establecer la posición del cursor.

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

Código: -

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

}  
¿Fue útil?

Solución

Su problema es que usted está llamando de escritura para que la tubería 1, y WriteLine para borrar la línea 2.

Esto no tiene ningún sentido. La única diferencia entre los métodos es que WriteLine añade un salto de línea hasta el final. Todo lo que realmente está haciendo es esta la salida de esta cadena:

  "                                  "\r\n

Sin conocer la marca de la pantalla del cliente que está utilizando, no puedo decir la forma correcta de hacerlo, pero la forma en que están tratando de hacerlo no va a funcionar. La mayoría de los terminales aceptan los códigos de caracteres especiales para mover el cursor o borrar la pantalla. ¿Ha encontrado una referencia para el terminal que está trabajando? La mayoría de las pantallas se desactive si se le envía CHR (12).

Todo eso de lado, hay un gran problema con el diseño de su clase. Nunca se debe confiar en los destructores para liberar recursos en C #.

En C #, el destructor será llamado cuando el recolector de basura recoge el objeto, por lo que no hay manera determinista saber cuando el recurso (en este caso un puerto COM), se recogerán y se cierra.

En su lugar, implementar la interfaz IDisposable en su clase.

Para ello, debe agregar un método Dispose a su clase. Esto serviría al mismo propósito que el destructor actual.

Al hacer esto, se puede utilizar una función incorporada de la lengua en C # para liberar sus recursos cuando el objeto sale del ámbito.

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

Otros consejos

Enviar código hexadecimal 0C para borrar la pantalla, funciona para la mayoría de pantallas

Este es un ejemplo de código:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top