代码之家  ›  专栏  ›  技术社区  ›  anna carolina

Messagebox在调试模式下工作,但未正常运行

  •  1
  • anna carolina  · 技术社区  · 8 年前

    我正在为GSM调制解调器制作软件。它使用AT命令进行串行通信。我们向它发出AT命令,它通过串行通信响应。我正在命令它检查SIM卡中的余额 AT+CUSD=1,"*141#" 。其反应如下:

    +CUSD: 0, "Your balance is ... xxxxxxx "
    

    现在我想在一个消息框中显示这个消息。这是我正在使用的小代码:

    String data = serialPort1.ReadExisting();  //to receive serial data and store it in data strig
    logsTextBox.AppendText(data);  // display it in text box
    logsTextBox.AppendText("\n");
    
    if (data.Contains("+CUSD:"))
    {
      MessageBox.Show(data);
    }
    

    data 但当我正常运行它时,它在消息框中只显示几个字符。这样地:

    enter image description here

    相反,它应该是这样的:

    enter image description here

    我发现的问题是,当调试第二个图像中显示的所有数据内容时,它们都保存在数据变量中,因此它完全显示在消息框中。但在正常运行时,字符串数据中没有接收到完整的数据,这就是为什么它显示的数据较少,如第一幅图像所示。如何解决这个问题。原因可能是什么。请帮忙。

    2 回复  |  直到 8 年前
        1
  •  1
  •   umeshkumar sohaliya    8 年前

    这是串行端口的典型行为。它们非常慢。当DataReceived事件触发时,通常只会得到一个或两个字符。值得注意的是,它在调试时工作得很好,因为单步执行代码可以为串行端口提供大量时间来接收其他字符。但是,只要您在没有调试器的情况下运行,它就会进入Kaboom,因为字符串不够长。

    您需要通过将接收到的字符串附加到类范围内的字符串变量来修改代码。只有在收到所有预期字符后才能分析字符串。你需要一些方法来知道你已经收到了完整的回复。大多数典型的串行设备将使用特殊字符终止字符串。通常是换行。

        2
  •  0
  •   Graphic Equaliser    8 年前

    您应该调用ReadExisting,直到返回空字符串,并将结果连接到每次调用的数据。也许调试模式对串行端口的读取缓冲区比正常模式大。