0

POS c# アプリケーションでポール ディスプレイ (E POS) を使用しました。これには 2 つの大きな問題があります。1. ディスプレイを完全にクリアできません。2. カーソル位置を設定できません。

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

コード:-

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

}  
4

2 に答える 2

1

16 進コード 0C を送信して画面をクリアします。ほとんどのディスプレイで機能します

コードサンプルは次のとおりです。

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
于 2014-02-23T05:20:11.673 に答える
1

問題は、Write を呼び出して行 1 をクリアし、WriteLine を呼び出して行 2 をクリアしていることです。

これは意味がありません。メソッド間の唯一の違いは、WriteLine が末尾に改行を追加することです。あなたが実際に行っているのは、この文字列を出力することだけです:

  "                                  "\r\n

あなたが使用しているポール ディスプレイのブランドを知らなければ、適切な方法を教えることはできませんが、あなたがしようとしている方法は決してうまくいきません。ほとんどの端末では、特殊文字コードを使用してカーソルを移動したり、表示をクリアしたりできます。使用している端末のリファレンスは見つかりましたか? CHR(12) を送信すると、ほとんどの表示がクリアされます。

それはさておき、クラスの設計には大きな問題があります。C# では、リソースを解放するためにデストラクタに依存しないでください。

C# では、ガベージ コレクターがオブジェクトを収集するときにデストラクタが呼び出されるため、リソース (この場合は Com ポート) がいつ収集されて閉じられるかを知る決定論的な方法はありません。

代わりに、クラスにインターフェイス IDisposable を実装します。

これには、Dispose メソッドをクラスに追加する必要があります。これは、現在のデストラクタと同じ目的を果たします。

そうすることで、C# の組み込み言語機能を利用して、オブジェクトがスコープ外になったときにリソースを解放できます。

using (PoleDisplay p = new PoleDisplay())
{
     // Do Stuff with p
}
// When the focus has left the using block, Dispose() will be called on p.
于 2008-12-25T06:00:48.593 に答える