0

我在我的 POS c# 应用程序中使用了极显示(E POS)。我有两个主要问题,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

您的问题是您正在调用 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 回答
1

发送十六进制代码 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 回答