serialPort_DataReceived don';无法在exe文件中工作

本文关键字:exe 文件 工作 DataReceived don serialPort | 更新日期: 2023-09-27 18:28:03

我用串行端口写了一个程序,如下所示:

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;
    }

在visualstudio中运行程序时效果很好!但是当我为我的程序创建安装程序或运行exe文件时,数据不会接收到serialPort,我也不会收到任何错误。但当我用这个程序发送数据时,它就工作了!

你能帮我吗?

serialPort_DataReceived don';无法在exe文件中工作

有问题的行可能是:

serialLabel.BackColor = Color.Red;

serialLabel.BackColor = Color.Lime;

它在开发环境中仍然工作的可能性很小,但是:

当数据为从SerialPort对象接收。因为此事件是在次线程,而不是主线程,试图修改主线程中的元素(如UI元素)可能引发线程异常。如果需要修改主体中的元素Form或Control,使用Invoke将更改请求发回正确螺纹上的工作。

[msdn]

尝试:

serialLabel.Invoke(new EventHandler(delegate
{
   serialLabel.BackColor = Color.Red;
}));

还有:

  • 确保在方法processUnrealdedMessages()中,未调用(例如,未调用也不应将数据写入EventLog)的情况下,不要触摸GUI或任何应该从创建它的线程访问的内容
  • 调试应用程序时,请检查是否没有First Chance异常
  • 查看应用程序事件日志以了解应用程序生成的消息
  • 在执行其他操作之前,将您在serialPort1_DataReceived事件中收到的数据记录到文件中(这将检查DataReceived是否在应该引发的时候引发)
  • 订阅SerialPort.ErrorReceived事件