在通过串行端口接收数据的处理程序中,当接收到数据时,我将其存储到一个字符串中并执行 .contains 搜索以确定是否需要对数据进行处理。当应用程序处于空闲状态并且(让我们称之为调制解调器)发送类似“已连接”的内容时,它可以正常工作。
问题是当我轮询机器时。当我启动一个期望返回结果的命令时它不起作用,我不知道为什么。现在,如果我使用消息框启动该功能,它将起作用。我宁愿没有不必要的消息框。
这是我的代码示例。
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
if (this.InvokeRequired)
{
RefreshTextBox d = new RefreshTextBox(RefreshTextBoxResults);
Invoke(d);
}
else
{
RefreshTextBoxResults();
}
}
private void RefreshTextBoxResults()
{
//MessageBox.Show("refresh text is occurring");
indata1 = serialPort1.ReadExisting();
rx.AppendText(indata1);
string dataCheck = indata1.ToUpper();
//MessageBox.Show(dataCheck);
if (indata1.ToUpper().Contains("CONNECT"))//dataCheck.Contains("CONNECT"))
{
// MessageBox.Show("connect");
cState.Text = "Connected";
if(connected==false)
connectLink();
}
if (dataCheck.Contains("CONNECTED"))
{
// MessageBox.Show("Active Call in Session");
cState.Text = "Connected";
if (connected==false)
connectLink();
}
if (dataCheck.Contains("NO"))
{
cState.Text = "Disconnected";
disconnect();
}
if (dataCheck.Contains("CAMPOS"))
{
campos = indata1;
camDat = true;
}
}
private void cState_Click(object sender, EventArgs e)
{
writeDevice("callstatus");
}
public void writeDevice(string cmd)
{
try
{
{
serialPort1.Write(cmd + "\r\n");
}
}
catch
{ noconnect(); }
}
当我执行 cstate() 时,它应该返回呼叫状态和类型(如果有)。正如我在提示框中看到的那样,调制解调器确实会响应。如果单词 connected 在那里的任何地方它应该将标签的文本更改为“Connected”。随着代码的放置,该标签没有任何反应。但是,如果我删除 RefreshTextBoxResults() 中第一行的注释,使 MessageBox 处于活动状态,它会检测调制解调器的状态。
我只是不明白发生了什么。有人可以向我解释为什么会这样吗?