2016-08-20 76 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()輸入到一個文本框中的所有信息,如果我用ReadTo(「AT + ..」)沒有錯誤,但是當我運行程序並點擊我的按鈕我的程序直接關閉

+0

你使用try {} catch {}塊嗎? '直接關閉'聽起來像一個未處理的執行,調試器沒有配置爲停止在這個特定的例外給我。 –

回答

0

問題是,你的事件處理程序與你的UI線程不同。您需要在文本框中調用Invoke來設置文本。

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

也許調用有點不同。我目前無法測試它。

+0

閣下爲您的答案,這不工作。 – TomiTeruz

0

看起來你不處理你的例外,這就是爲什麼它不過關,如果ReadExisting()是爲你工作那麼試試這個

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

和過程的代碼如下

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; 
} 

根據對此link readto只讀取指定字符串的緩衝區和指定的字符串不包含它從緩衝區中刪除,所以它的替代readto試試這個

+0

thks先生,我已經嘗試我得到的錯誤信息「System.NullReferenceException發生在projext.exe附加信息:對象引用未設置爲項目的實例」ReadExiting()是好的沒有錯誤,但我得到所有信息一個文本框,如果我使用,我想只顯示我的調制解調器模型在txtType – TomiTeruz

+0

嘗試啓動您的serialPort1對象,這就是爲什麼它給這樣的NullRefrencexception –

+0

像這樣serialPort1.DiscardNull = true; ? – TomiTeruz