串口数据形式的停止按钮功能使其无响应

本文关键字:功能 响应 按钮 数据 串口 | 更新日期: 2023-09-27 18:05:12

在我的表单应用程序中,我使用串行端口读取串行数据并将它们存储在列表中以供进一步使用。我有一个停止按钮事件,但在单击按钮表单不终止。该表单包含显示从Serial Port获得的解析值的文本框(通过单击一个名为Start的按钮启动解析过程)。我的目标是在按下停止按钮时暂停从串行端口接收数据。到目前为止,当单击开始按钮时,数据读取开始,但由于某种原因,停止按钮不起作用。

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        serialPort1.NewLine = "-";
        RxString = serialPort1.ReadLine();
        RxString = RxString.Replace("$", "");
        this.Invoke(new EventHandler(DisplayText));
    }
    private void DisplayText(object sender, EventArgs e)
    {
        richTextBox1.AppendText(RxString);
        GlobalList.AddRange(parsed());

        displayglobal();
        graphs();
    }
    private void Start_Click(object sender, EventArgs e)
    {
        serialPort1.PortName = "COM32";
        serialPort1.BaudRate = 9600;
        serialPort1.DtrEnable = true;
        serialPort1.Open();
        if (serialPort1.IsOpen)
        {
            Start.Enabled = false;
            Stop.Enabled = true;
            richTextBox1.ReadOnly = false;
        }
    }
    private void Stop_Click(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen)
        {
            serialPort1.Close();
            Start.Enabled = true;
            Stop.Enabled = false;
            richTextBox1.ReadOnly = true;

        }

串口数据形式的停止按钮功能使其无响应

我通常做的不是突然关闭串行端口,而是在readline之前放一个检查。比如说,你的状态是ON或OFF。并从事件接收外部更改状态。每当缓冲区中的数据可用时,事件接收总是触发。1. 当数据可用时,事件接收为fire2. 如果状态为ON,则创建条件,执行readline,否则忽略readline。3.在停止按钮中设置状态为OFF,在开始按钮中设置状态为ON。4. 当你认为你不需要通讯时,你可以关闭它。