2008-12-25 3 views
0

J'ai utilisé l'affichage sur poteau (E POS) dans mon application POS C#. J'ai deux problèmes majeurs: 1. Je n'arrive pas à effacer complètement l'affichage. 2. Je ne peux pas définir la position du curseur.Problème d'affichage de la polaire dans C#

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

} 
+0

poledisplay-c tag # est trop spécifique, a ajouté C# et EPOS balises . – stukelly

Répondre

0

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 chaîne cette émission en sortie:

"         "\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 ça ne marchera jamais. La plupart des terminaux acceptent des codes de caractères spéciaux pour déplacer le curseur ou effacer l'affichage. Avez-vous trouvé une référence pour le terminal avec lequel vous travaillez? La plupart des affichages disparaîtront si vous leur envoyez CHR (12).

Tout cela mis à part, il y a un problème majeur dans la conception de votre classe. Vous ne devriez jamais compter sur des destructeurs pour libérer des ressources en C#. En C#, le destructeur sera appelé lorsque le garbage collector recueille l'objet, il n'y a donc aucun moyen déterministe de savoir quand la ressource (dans ce cas un port Com) sera collectée et fermée. Au lieu de cela, implémenter l'interface IDisposable sur votre classe à la place.

Cela vous oblige à ajouter une méthode Dispose à votre classe. Cela servirait le même but que votre destructeur actuel. En faisant cela, vous pouvez utiliser une fonction de langage intégrée en C# pour libérer vos ressources lorsque l'objet sort du champ d'application.

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

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

ici est un exemple de code:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen 
srPort.Write(bytesToSend, 0, 1);