c#中的极点显示问题

时间:2008-12-25 05:51:27

标签: c# serial-port point-of-sale

我在POS c#应用程序中使用了极点显示(E POS)。我有两个主要问题, 我无法完美地清除显示屏。 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);
    }

}  

2 个答案:

答案 0 :(得分:1)

发送十六进制代码0C以清除屏幕,它适用于大多数显示器

这是一个代码示例:

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

答案 1 :(得分:0)

您的问题是您正在调用Write来清除第1行,而WriteLine则清除第2行。

这没有任何意义。这些方法之间的唯一区别是WriteLine在末尾添加了一个换行符。你真正做的就是输出这个字符串:

  "                                  "\r\n

在不知道您正在使用的杆式显示器的品牌的情况下,我无法告诉您正确的方法,但您尝试这样做的方式将永远不会奏效。大多数终端接受特殊字符代码来移动光标或清除显示。您是否找到了与您合作的终端的参考资料?如果你发送CHR(12),大多数显示都会清除。

除此之外,您的班级设计存在一个主要问题。你永远不应该依赖析构函数来释放C#中的资源。

在C#中,当垃圾收集器收集对象时将调用析构函数,因此没有确定的方法来知道何时收集和关闭资源(在本例中为Com端口)。

相反,在您的班级上实现IDisinterable接口。

这要求您在类中添加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.