我开发了一个 C# 应用程序来读取来自 GSM 调制解调器的呼叫。我使用计时器定期读取端口并在有来电时通知我。
现在我正在尝试使用另一个将写入AT+CSQ的计时器 - 要了解端口上的信号质量,并读取端口以获取质量值。在这两个计时器中,我都使用正则表达式来匹配和分离我需要的数据。现在的问题是,只有我正在读取信号质量的timer2才能正常工作,但不能读取来电的计时器。
定时器读取信号强度:
private void tmr_sig_quality_Tick(object sender, EventArgs e)
{
if (port.IsOpen)
{
port.WriteLine("AT+CSQ");
string s= port.ReadExisting();
var match= Regex.Match(s,@"\+CSQ: (\d+),(\d+)");
if (match.Success)
{
progressBar1.Value = int.Parse(match.Groups[1].Value);
}
}
}
计时器读取来电:
private void timer1_Tick(object sender, EventArgs e)
{
s = port.ReadExisting();
var match = Regex.Match(s, "RING[^\\+]*\\+CLIP:\\s*\"(?<phone>[^\"]*)\",(\\d+),\"([^\"]*)\",(\\w*),\"(\\w*)\",(\\w*)");
if (match.Success && s.Contains("RING"))
{
incall_status.Text = "Incoming Call...." + match.Groups["phone"].Value;
incall_status.Visible = true;
}
}
为什么会发生这种情况和解决方案?