Timer运行一段时间后失效

ltaixxx 2015-06-20 02:40:07
发生一件很怪异的事,用Timer定时 每隔3秒钟进行一次数据同步操作,一开始很正常, 但是过了一段时间后 Timer中的代码却不运行了, 然后查看Timer的状态, 确实还是启动状态, 但是就是不运行Timer中的事件, 这是怎么回事呢 , 在客户的一台电脑上发生这个现象, 其他电脑都没有
示例代码

private void tmr_work_Tick(object sender, EventArgs e)
{
tmr_work.Enable=false;
try{
//这里是数据同步操作
}
catch(Exception ex){
}
finally{
tmr_work.Enable=true;
}
}
...全文
990 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
闭包客 2016-12-13
  • 打赏
  • 举报
回复
异步线程挂掉了。
xian_wwq 2016-12-13
  • 打赏
  • 举报
回复
引用 楼主 ltaixxx 的回复:
发生一件很怪异的事,用Timer定时 每隔3秒钟进行一次数据同步操作,一开始很正常, 但是过了一段时间后 Timer中的代码却不运行了, 然后查看Timer的状态, 确实还是启动状态, 但是就是不运行Timer中的事件, 这是怎么回事呢 , 在客户的一台电脑上发生这个现象, 其他电脑都没有 示例代码 private void tmr_work_Tick(object sender, EventArgs e) { tmr_work.Enable=false; try{ //这里是数据同步操作 } catch(Exception ex){ } finally{ tmr_work.Enable=true; } }
使用timer,如果处理操作中有比较耗时的操作,就一定要小心。 因为timer存在重入的问题, 如果timer.interval设置的比较短,有可能第一轮运行时发生异常导致指定时间内未完成, 第二轮周期到了,timer函数会再次执行。 如果代码是不可重入的,那么bug就出现了。
  • 打赏
  • 举报
回复
输出你的异常早就发现问题了,catch写了有什么用,就是为了隐藏bug?
牛接口 2016-12-12
  • 打赏
  • 举报
回复
好了,发泄完毕。 顶一楼,请技术哥来说说到底是为什么timer会莫名其妙运行一段时间以后就不在运行呢? 先抛开代码异常,假设我就用timer 定时输入 Console.writeline ,这个时候,如果停止输出了,到底是为什么?
牛接口 2016-12-12
  • 打赏
  • 举报
回复
引用 楼主 ltaixxx 的回复:
发生一件很怪异的事,用Timer定时 每隔3秒钟进行一次数据同步操作,一开始很正常, 但是过了一段时间后 Timer中的代码却不运行了, 然后查看Timer的状态, 确实还是启动状态, 但是就是不运行Timer中的事件, 这是怎么回事呢 , 在客户的一台电脑上发生这个现象, 其他电脑都没有 示例代码 private void tmr_work_Tick(object sender, EventArgs e) { tmr_work.Enable=false; try{ //这里是数据同步操作 } catch(Exception ex){ } finally{ tmr_work.Enable=true; } }
早就忘了csdn帐号密码,特地找回,登录上来,来说说你 我最特么的就是看不起这种,不说问题,说一堆鸡巴理论的,人家问你东,你告诉别人西。 你知道,你就说,你不知道,你别特么磨磨唧唧。 人家现在有和你讨论什么try catch怎么样怎么样吗?你确定这个停止是因为发生了错误才异常终止? 动不动就是,我是站在一个技术经理的角度,告诉你怎么整改代码,整改你妹啊整改,我特么还是站在一个路人甲的角度,告诉你以后别特么装逼。。。
  • 打赏
  • 举报
回复
这个诡异的问题,实际上很可能不会是你贴出的”这里是数据同步操作“这里的代码造成的。你贴出的说明不了任何问题。 我只是从你贴出代码,看到一个公司的技术经理会怎样让你将所有代码进行整改的问题。
  • 打赏
  • 举报
回复
引用 楼主 ltaixxx 的回复:
代码却不运行了, 然后查看Timer的状态, 确实还是启动状态, 但是就是不运行Timer中的事件, 这是怎么回事呢
程序如果崩溃,就不会能够”查看Timer状态是启动状态“了。 程序崩溃了,至少代表着你不隐瞒bug,那么在后续debug的操作上才能前进一大步。
xuzuning 2015-06-20
  • 打赏
  • 举报
回复
其实很可能是占用的内存未及时释放造成的 当内存被耗尽时,程序就会被挂起,甚至退出 那么异常处理会生效吗?我看悬!即便能生效,程序都停止了,异常的可能原因还能展示出来吗? 只要使用 Timer ,基本上都会碰到这种问题。估计高手们都不用 Timer 的
  • 打赏
  • 举报
回复
可能你会找到理由说“我只是在一个用户的机器上有bug,其它电脑都没有啊。我只想要猜出来的结果让我试试就行了”。 但是程序如果因为开发和测试质量低而又bug时,假设碰上负责任的程序员还这样说,那么这个公司一定会很悲剧的。
  • 打赏
  • 举报
回复
如果你懒得在开发的机器上来想法重现用户的bug,那么就要在用户的机器上部署一个没有catch{}的版本。 可能你没有搞清楚try...catch的目的是什么。如果要发布一个程序,那么也许会在用户面前隐瞒一些bug。但是即使如此,也就是在整个系统的表现层(例如 UnhandledException 事件处理中)捕获异常并给用户另外一套对应的假提示。而你的代码,如果你在解决bug时也这样写try..catch,那么我相信你就没有负责任地把程序bug“捉出来”。对用户隐瞒信息的伎俩,现在变成糊弄自己了! 这里不可能胡乱猜出bug是什么。而是先要学会让bug能够“出来”(而不是带病进行后续操作)的基本开发素质。

110,538

社区成员

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

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

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