Question

I utilisé affichage pôles (E POS) dans mes POS c # application.I ont deux problèmes majeurs en ce que 1. Je ne peux pas effacer l'affichage parfaitement. 2. Je ne peux pas régler la position du curseur.

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

}  
Était-ce utile?

La solution

Votre problème est que vous appelez Ecrire à la ligne claire 1 et WriteLine pour effacer la ligne 2.

Cela ne fait aucun sens. La seule différence entre les méthodes est que WriteLine ajoute un saut de ligne à la fin. Tout ce que vous faites vraiment est cette sortie cette chaîne:

  "                                  "\r\n

Sans connaître la marque de l'écran pôle que vous utilisez, je ne peux pas vous dire la bonne façon de le faire, mais la façon dont vous essayez de le faire ne fonctionnera jamais. La plupart des terminaux acceptent des codes de caractères spéciaux pour déplacer le curseur ou effacer l'écran. Avez-vous trouvé une référence pour le terminal que vous travaillez? La plupart des écrans dégageront si vous les envoyez CHR (12).

À part de ça, il y a un problème majeur avec la conception de votre classe. Vous ne devez pas compter sur les ressources libres Destructeurs à en C #.

En C #, le destructor sera appelée lorsque le garbage collector recueille l'objet, donc il n'y a aucun moyen déterministe de savoir quand la ressource (dans ce cas, un port Com), sera recueillie et fermée.

Au lieu de cela, implémenter l'interface IDisposable de votre classe.

Cela vous oblige à ajouter une méthode Dispose à votre classe. Cela servirait le même but que votre destructor actuelle.

En faisant cela, vous pouvez utiliser un construit en fonction de la langue en C # pour libérer vos ressources lorsque l'objet est hors de portée.

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

Autres conseils

Envoyer code hexadécimal 0C pour effacer l'écran, cela fonctionne pour la plupart des écrans

Voici un exemple de code:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top