我正在一个线程中检查 GPRS 连接CompactFramework
。
线程的想法很简单:如果程序没有连接,那么我运行代码来连接(这段代码给了我错误),但如果连接正常,我会在 60 秒后再次检查,依此类推。
现在,专注于连接代码。以下代码检查它是否已连接,如果未连接,则我订阅DataReceive
事件。
void initFormText()
{
if (isThereConnect()) //true if it is connected
{
//enable timer to recheck if it's connected
}
else //it isn't connected
{
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
serialPort1.Open();
timerStep.Enabled = true;
}
}
现在问题来了,在 serialPort1_DataReceived 我检查数据并设置一个由 timerStep 测试的变量并执行一些步骤。
问题发生在 DataReceived 事件中,问题是当我在线程之外运行以下代码时它工作正常,它完成所有工作并建立连接,但在线程中它不起作用。我测试这个添加了一些MessageBox
,我意识到 DataReceive 中的那些永远不会出现。
void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] data = new byte[1024];
int n = serialPort1.Read(data, 0, data.Length);
string rec = Encoding.GetEncoding("windows-1252").GetString(data, 0, n);
if (string.IsNullOrEmpty(rec))
{
return;
}
if (rec.Contains("AT+CIMI") && rec.Contains("OK"))
{
MessageBox.Show("serialPort 1");
currState = 1;
}
else if (rec.Contains("READY"))
{
MessageBox.Show("serialPort 11");
currState = 1;
}
else if (rec.Contains("0,1") || rec.Contains("0,5"))
{
MessageBox.Show("serialPort 2");
currState = 2;
}
}
所以由于某种原因,serialPort 没有收到任何东西,我不知道为什么。它在线程之外工作但不在线程中工作的事实让我感到沮丧。
我很感激任何帮助。提前致谢!