2016-08-20 9 views
0

명령 정보를 텍스트 상자로 보내는 방법을 묻고 싶습니다.C# AT 명령 정보를 텍스트 상자

내 코드는

serialPort1.Open(); 

//manuf 
serialPort1.Write("AT+CGMI" + System.Environment.NewLine); 
//Thread.Sleep(1000); 
txtmanuf.text=serialport1.ReadTo("AT+CGMI").ToString(); 

//TYPE MODEM 
serialPort1.Write("AT+CGMM" + System.Environment.NewLine); 
Thread.Sleep(1000); 
txtType.Text= serialPort1.ReadExisting().ToString(); 

//IMEI 
serialPort1.Write("AT+CGSN" + System.Environment.NewLine); 
Thread.Sleep(1000); 
txtimei.text=serialport1.ReadTo("AT+CGSN").ToString(); 

//phone number 
serialPort1.Write("AT+CNUM" + System.Environment.NewLine); 
Thread.Sleep(1000); 
txtphone.text=serialport1.ReadTo("AT+CNUM").ToString(); 

나는 ReadExisting()를 모든 정보가 하나 개의 텍스트 상자에 입력, 내가 (".. + AT") ReadTo를 사용하는 경우에는 오류가 없지만 사용하는 경우 I는 프로그램을 실행할 때 내 버튼을 직접 클릭하십시오.

+0

'try {} catch {}'블록을 사용합니까? '직접 닫기'는 디버거가 처리되지 않은 것처럼 들리지만이 특별한 예외가 발생하지 않도록 설정되었습니다. –

답변

0

문제는 귀하의 Eventhandler가 귀하의 UI 스레드와 다른 스레드에 있다는 것입니다. 텍스트를 설정하려면 텍스트 상자에서 호출을 호출해야합니다.

textbox.Invoke(()=>{textbox.Text=serialport.ReadExisting().ToString();}); 

어쩌면 Invoke를 조금 다른 것으로 부릅니다. 현재 테스트 할 수 없습니다. 당신은 당신이 다음이

string data=Process(serialPort1.readExisting(),"AT+.."); 

시도에 대한 ReadExisting()가 작동하고 프로세스에 대한 코드 따르면

private string Process(string input,string rto) 
{ 
    int location=input.indexOf(rto); 
    string temp=null; 
    char[] array=input.toCharArray(); 
    for(int i=0;i<location;i++) 
    { 
     temp+=array[i]; 
    } 
    temp=temp.Remove(location,rto.Length); 
    serialPort1.DiscardInBuffer(); 
    return temp; 
} 

를 다음과 같은 경우는 그러나 종료 왜 당신의 예외를 처리하지 않는 것처럼

+0

귀하의 답변에 대한 귀하의 thks 선생님,이 작동하지 않습니다. – TomiTeruz

0

이 보이는 this to link readto는 지정된 문자열로 버퍼를 읽으며 지정된 문자열은 포함되지 않습니다. 버퍼에서 제거되므로 readto를 시도해보십시오.

+0

thks 선생님, 나는 이미 오류 정보를 얻습니다. "System.NullReferenceException이 projext.exe에서 발생했습니다. 추가 정보 : 개체 참조가 프로젝트의 의도로 설정되지 않았습니다."ReadExiting()은 오류가 없지만 모든 정보를 가져옵니다. 하나의 텍스트 상자를 사용하면 txtType에 내 모뎀 모델을 표시하고 싶습니다. – TomiTeruz

+0

serialPort1 개체를 초기화하려고 시도하는 이유는이 NullRefrencexception을 부여하는 이유입니다. –

+0

serialPort1.DiscardNull = true; ? – TomiTeruz