题
我用极显示器(E POS)在我的POS C#application.I有两个主要问题, 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);
}
}
解决方案
您的问题是,你在呼唤写操作清除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.
其他提示
发送十六进制代码0℃至清屏,它适用于大多数显示器
这里是一个代码示例:
byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
不隶属于 StackOverflow