Timer自己停止了怎么回事?

hhhhha123 2015-05-21 03:17:17
我想把一个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();
还是一赋值就停止了 为啥啊,奔溃
...全文
609 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhhha123 2015-05-25
  • 打赏
  • 举报
回复
引用 17 楼 qldsrx 的回复:
看下你的Timer是怎么定义的,是局部还是全局变量。
就是工具箱拖出的控件,和这个没关系吧
Donniezhu 2015-05-22
  • 打赏
  • 举报
回复
如果你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也是类似。
Donniezhu 2015-05-22
  • 打赏
  • 举报
回复
你现在用的应该是 System.Windows.Forms.Timer,如果这样不行的话可以使用System.Timers.Timer 多线程的方式。
hhhhha123 2015-05-22
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
确保你没把代码写进死循环里
我现在新建项目模拟了下,就2个chart,数值写死,chart2.ChartAreas.Add(chart1.ChartAreas[0]); 一执行, private void timer1_Tick(object sender, EventArgs e) { label1.Text = DateTime.Now.ToString(); } 就不再运行了,不会报任何错,页面也不会卡死,再来个按钮也可以点击啥的,啥都没事,就是定时器停了。
於黾 2015-05-22
  • 打赏
  • 举报
回复
确保你没把代码写进死循环里
於黾 2015-05-22
  • 打赏
  • 举报
回复
定时器停了,一般是主线程有阻塞的代码引起的 比如sleep,比如thread.join,比如while(true) 你chart里的数据是哪里来的,是不变的,还是一直在变化的?
hhhhha123 2015-05-22
  • 打赏
  • 举报
回复
引用 9 楼 dogfish 的回复:
是WebForm吗?WebForm的Timer是JS来的。JS有错误就会全停了。
winform
hhhhha123 2015-05-22
  • 打赏
  • 举报
回复
引用 8 楼 Donnie_ZhuXuGuang 的回复:
如果你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也是类似。
我清空了目标chart的ChartAreas 、Series后再添加的,因为我要取得不同源chart的样式和数据,这段代码不会报错的,一直运行的正常 定时器和chart完成不相干,哪怕是主页面的一个刚启动就运行的定时器,执行一句abel1.Text = DateTime.Now.ToString(); 只要执行了chart的那段代码也会停止,也就是这个进程的所有定时器都会停止,有空的可以模拟下,2个chart,一个定时器
qldsrx 2015-05-22
  • 打赏
  • 举报
回复
看下你的Timer是怎么定义的,是局部还是全局变量。
hhhhha123 2015-05-22
  • 打赏
  • 举报
回复
引用 15 楼 Donnie_ZhuXuGuang 的回复:
你现在用的应该是 System.Windows.Forms.Timer,如果这样不行的话可以使用System.Timers.Timer 多线程的方式。
这样是可以解决,我是想知道System.Windows.Forms.Timer为啥不行?理论Timer和chart怎么会互相影响?我其他页面很多System.Windows.Forms.Timer,都换了比较麻烦 我chart不那样用了现在,只是想知道为啥发生这种情况现在
Dogfish 2015-05-22
  • 打赏
  • 举报
回复
是WebForm吗?WebForm的Timer是JS来的。JS有错误就会全停了。
hhhhha123 2015-05-21
  • 打赏
  • 举报
回复
现在发现,把其他页面的定时器也能停了
hhhhha123 2015-05-21
  • 打赏
  • 举报
回复
“原先是双击Chart弹出另一个Form给其中的Chart赋值,怀疑弹窗影响” 原先这种情况,把这个弹出Form关闭,所有的定时器就自己运行开了。 但是现在同一个窗口Chart赋值,也会把所有的定时器暂停
hhhhha123 2015-05-21
  • 打赏
  • 举报
回复
引用 4 楼 tmd456 的回复:
是不是c.ChartAreas[0]这句有问题
不是 除了所有的定时器都停了,其他都正常的,图表的数据显示啥的都正常
tmd456 2015-05-21
  • 打赏
  • 举报
回复
是不是c.ChartAreas[0]这句有问题
hhhhha123 2015-05-21
  • 打赏
  • 举报
回复
chart16.ChartAreas.Add(c.ChartAreas[0]); 这句是关键,加了这句就不行 chart16.ChartAreas.Add(“123”);没事
hhhhha123 2015-05-21
  • 打赏
  • 举报
回复
引用 1 楼 hefeng_aspnet 的回复:
Timer全局
什么意思,我现在就这一个页面上操作,Timer就工具箱拖了个控件
csdn_aspnet 2015-05-21
  • 打赏
  • 举报
回复
Timer全局

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧