我用串口编写了一个程序:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialLabel.BackColor = Color.Red;
storage = serialPort1.ReadExisting();
if (storage.Contains("CMGL"))
{
if (storage.Length > 65)
{
processUnreadedMessages(storage);
}
else
{
Thread.Sleep(500);
}
}
else if (storage.Contains("CMTI"))
{
serialPort1.Write("AT+CMGL\r");
Thread.Sleep(500);
}
storage = "";
serialLabel.BackColor = Color.Lime;
}
在Visual Studio中运行程序时效果很好!
但是当我为我的程序创建设置或运行exe文件时,数据不会收到serialPort,我也不会收到任何错误。但是当我用这个程序发送数据时它就可以了!
你可以帮我吗?
答案 0 :(得分:2)
有问题的行可能是那些:
serialLabel.BackColor = Color.Red;
和
serialLabel.BackColor = Color.Lime;
在开发环境中它仍然很有可能仍然有效,但是:
当数据出现时,在辅助线程上引发DataReceived事件 从SerialPort对象接收。因为这个事件是在一个 辅助线程,而不是主线程,试图修改一些 主线程中的元素,如UI元素,可以引发一个 线程异常。如果有必要修改main中的元素 表单或控件,使用Invoke发回更改请求,这样做 正确的线程上的工作。
尝试改为:
serialLabel.Invoke(new EventHandler(delegate
{
serialLabel.BackColor = Color.Red;
}));
此外: