C# 键入ussd命令并使用c在文本框中显示结果#
我的项目中有一个Windows窗体。此表单包含3个控件:C# 键入ussd命令并使用c在文本框中显示结果#,c#,winforms,serial-port,ussd,C#,Winforms,Serial Port,Ussd,我的项目中有一个Windows窗体。此表单包含3个控件:txtss、btnCheck和txtMessage。该场景是在txtss文本框中输入“ussd”命令并按下btnCheck按钮后,结果将显示在txtMessage中 下面是我的winform的详细信息 BTN检查代码: private void btnCheck_Click(object sender, EventArgs e) { try { SerialPort port = new SerialPor
txtss
、btnCheck
和txtMessage
。该场景是在txtss
文本框中输入“ussd”命令并按下btnCheck
按钮后,结果将显示在txtMessage
中
下面是我的winform的详细信息
BTN检查代码:
private void btnCheck_Click(object sender, EventArgs e)
{
try
{
SerialPort port = new SerialPort();
port.BaudRate = 115200;
port.PortName = "COM3";
port.Timeout = 300;
port.Open();
port.Write("AT+CUSD=1," + txtUssd.Text + ",15");
txtMessage.text = ; // <<< here is the result.
// but i dont know how to refer port.Write("AT+CUSD=1," + txtUssd.Text + ",15");
port.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void b检查\u单击(对象发送者,事件参数e)
{
尝试
{
SerialPort端口=新的SerialPort();
波特率=115200;
port.PortName=“COM3”;
端口超时=300;
port.Open();
port.Write(“AT+CUSD=1,+txtusd.Text+”,15”);
txtMessage.text=;//如果要从COM端口接收响应,需要向代码中添加事件处理程序,并将其注册到COM端口的DataReceived
事件中,以便在接收数据时读取响应,并将其显示在txtMessage
文本框中
由于事件将在不同的线程上发送,并且不允许从未创建UI控件的线程更新UI控件,因此更新将分两步进行,如下所示,您需要将其添加到表单中:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
// read the response.
var response = ((SerialPort)sender).ReadLine();
// Need to update the txtMessage on the UI thread.
this.Invoke(new Action(() => txtMessage.Text = response));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在btnCheck_单击方法中,在port.Open();
行之后,需要添加以下行以注册事件处理程序:
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
private void btnCheck_Click(object sender, EventArgs e)
{
try
{
_port.Write("AT+CUSD=1," + txtUssd.Text + ",15");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
另一个问题是您可能在收到响应之前立即关闭COM端口。因此,我建议您执行以下操作:
使port
成为表单类的成员变量(将其命名为\u port
)
你能澄清这个问题吗?请参考指南。这意味着我必须在我的项目中添加一些代码(方法port\u DataReceived)并添加port.DataReceived+=new SerialDataReceivedEventHandler(port\u DataReceived)
在btnCheck中?@aminvincent是的,这是一个想法。port\u DataReceived
方法可以是您表单中的私有方法。谢谢您的建议,…当我运行我的项目并单击btnCheck时消失任何内容…您能帮我修复上面的代码吗?@aminvincent对不起,我不理解您的问题。您的意思是什么“当我点击btnCheck时消失任何东西”?我再次尝试上面的代码,…绝对有效…但结果看起来还行…我不知道如何修复此问题。。。
_port = new SerialPort();
_port.BaudRate = 115200;
_port.PortName = "COM3";
_port.Timeout = 300;
_port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
_port.Open();
_port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
_port.Close();
_port.Dispose();
private void btnCheck_Click(object sender, EventArgs e)
{
try
{
_port.Write("AT+CUSD=1," + txtUssd.Text + ",15");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}