3

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

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;



        }
4

1 回答 1

0

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

希望这有帮助。

于 2014-06-11T08:49:11.600 回答