2016-08-20 122 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