串行端口数据表单中的停止按钮功能使其无响应

时间:2013-03-22 11:21:22

标签: c# visual-studio-2010 serial-port arduino

在我的表单应用程序中,我正在使用串行端口读取串行数据并将它们存储在列表中以供进一步使用。我有一个停止按钮事件,但单击按钮时窗体不会终止。窗体包含显示从串行端口获取的解析值的文本框(解析过程通过单击名为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;



        }

1 个答案:

答案 0 :(得分:0)

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

希望得到这个帮助。