当前位置: 代码迷 >> C# >> Timer自己停止了咋回事
  详细解决方案

Timer自己停止了咋回事

热度:83   发布时间:2016-05-05 03:35:44.0
Timer自己停止了怎么回事?
我想把一个Chart的数据赋值给另一个Chart,
         chart16.ChartAreas.Clear();
                chart16.ChartAreas.Add(c.ChartAreas[0]);
                chart16.Series.Clear();
                chart16.Series.Add(c.Series[0]);
                chart16.Titles.Clear();
                chart16.Titles.Add(c.Titles[0]);
但是 只要添加这一段代码,这个Form中的Timer就自动停止了。
原先是双击Chart弹出另一个Form给其中的Chart赋值,怀疑弹窗影响,现在把代码都删了,就本form里写这么一点,Timer事件里写一句:abel1.Text = DateTime.Now.ToString();
还是一赋值就停止了 为啥啊,奔溃
------解决思路----------------------
Timer全局
------解决思路----------------------
是不是c.ChartAreas[0]这句有问题
------解决思路----------------------
如果你chart1,只有一个ChartAreas 、一个Series,那直接用 this.chart2.Series.Add(chart1.Series[0]);就可以了。
因为chart默认或有一个ChartAreas 、一个Series。

你的代码没有错,那你先判断一下c 对象下的ChartAreas 、Series、 Titles 是否count大于0、是否为null,我认为很大的可能是C对象的问题。

你页面有几个timer,当你刷新的时候是先刷新c,还是执行你的这段代码?
C对象加载数据的时候是不是要删除ChartAreas 、Series,之后再添加对象,添加数据呢?如果是这样定时器刷新是当你删除了c对象的ChartAreas 时候,再执行或很短的时间执行chart16.ChartAreas.Add(c.ChartAreas[0]); 那肯定报错,Series、Titles也是类似。
------解决思路----------------------
是WebForm吗?WebForm的Timer是JS来的。JS有错误就会全停了。
------解决思路----------------------
定时器停了,一般是主线程有阻塞的代码引起的

比如sleep,比如thread.join,比如while(true)

你chart里的数据是哪里来的,是不变的,还是一直在变化的?
------解决思路----------------------
确保你没把代码写进死循环里
------解决思路----------------------
你现在用的应该是 System.Windows.Forms.Timer,如果这样不行的话可以使用System.Timers.Timer 多线程的方式。
------解决思路----------------------
看下你的Timer是怎么定义的,是局部还是全局变量。
  相关解决方案