문제

나는 POS C# 응용 프로그램에 Pole Display (E PO)를 사용했으며 그 두 가지 주요 문제가 있습니다. 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);
    }

}  
도움이 되었습니까?

해결책

당신의 문제는 당신이 write to clear 1에 전화를 걸고 있다는 것입니다.

이것은 말이되지 않습니다. 방법들 사이의 유일한 차이점은 Writeline이 끝에 라인 브레이크를 추가한다는 것입니다. 당신이 정말로하는 일은이 문자열을 출력하는 것입니다.

  "                                  "\r\n

당신이 사용하는 극 디스플레이 브랜드를 모르면, 나는 당신에게 그것을 할 수있는 적절한 방법을 말할 수는 없지만, 당신이하려는 방식은 결코 작동하지 않을 것입니다. 대부분의 터미널은 커서를 이동하거나 디스플레이를 지우기 위해 특수 문자 코드를 수락합니다. 함께 일하는 터미널에 대한 참조를 찾았습니까? CHR (12)을 보내면 대부분의 디스플레이가 지워집니다.

그 외에도, 당신의 수업 디자인에는 큰 문제가 있습니다. C#의 자유 자원에 소멸자에 의존해서는 안됩니다.

C#에서는 쓰레기 수집기가 객체를 수집 할 때 파괴자가 호출되므로 자원 (이 경우 COM 포트)이 수집 및 닫힐시기를 알 수있는 결정 론적 방법이 없습니다.

대신, 클래스에서 인터페이스 idisposable을 구현하십시오.

이를 위해서는 클래스에 처분 방법을 추가해야합니다. 이것은 현재의 소멸자와 같은 목적으로 사용됩니다.

이렇게하면 C#의 내장 언어 기능을 사용하여 객체가 범위를 벗어날 때 리소스를 해제 할 수 있습니다.

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

다른 팁

화면을 지우려면 16 진수 코드 0C를 보내고 대부분의 디스플레이에서 작동합니다.

코드 샘플은 다음과 같습니다.

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top