qq_38096211
可控的疯子
采纳率0%
2019-04-11 21:32 阅读 727

winform 怎么解决chartcontrol控件数据更新过快导致的索引超范围的问题

5

本来是想用Dev的chart控件写一个实时显示数据的示波器,用的是串口通信接口,波特率是14400,在下位机端是每一毫秒发送一次数据现在实现了每次接收到串口数据,产生事件后,将数据用图表的形式显示出来,但是执行一段时间后,在main函数处就会报错图片说明

尝试过在串口接收数据时,控件更新时收异常,但是最后报错都是如上图所示,开始以为的是dev的控件本身可能有bug,所以重新换用.netbar中realtime chart控件还是会出现相同的问题,而且抛出的异常和运行的时间没有必然的关系,有时候是接收了一小段时间就抛出异常,有时候是接收了较长一段时间后才会抛出这个是串口事件的代码

        private void ssp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (closing) return;
            try
            {
                Listening = true;
                byte[] buf = new byte[ssp.BytesToRead];

                ssp.Read(buf, 0, buf.Length);
                ssp.DiscardInBuffer();
                ssp.DiscardOutBuffer();

                for (int i = 0; i < buf.Length; i++)
                {
                    ChartRefresh(0, Convert.ToDouble(buf[i]));
                    ChartRefresh(1, 200.0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                Listening = false;//我用完了,ui可以关闭串口了。  
            }
        }

ChartRefresh刷新控件是后来改的是.netbar中实例的源码

然后,我把代码改成接收到串口数据的事件后,不对串口数据进行处理(只清了缓存,不读也不写),图表随意更新10次,100次,1000次数据,结果是更加容易出现异常,所以首先感觉是数据更新太快导致了控件刷新不过来

还请大佬们看看这个怎么破,怎么看到底是哪出了问题.....

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-04-12 09:55

    你这段代码加上了try catch,按理说不会丢出异常,你看下丢出异常的时候的调用堆栈,是不是别的代码触发的。

    点赞 评论 复制链接分享

相关推荐