日期:2014-05-18  浏览次数:20351 次

单线程实现类似Timer的间隔处理


Timer应该是多线程的,每到一定的时间就触发事件,不会管上一次执行是否成功

时间间隔大概为30秒
现在做法是建立一个线程,然后处理事件,
处理完后sleep   30   秒

问题在于窗体会不再响应,看任务管理器
应用也会显示没有反应
感觉好像性能不高效,有什么好的方法没有?

------解决方案--------------------
sleep 30 秒的过程,你应该使用Application.DoEvents()来让系统执行当前的其它的操作,否则界面就是像“死”了一样。
------解决方案--------------------
开启一个线程
while(true)
{
dosomething();
//如果是同步方式,会一直等到该方法执行完成再执行。
如果方法执行20s就是50s后再执行了
//可以采用异步解决你说的问题 在线程中对dosomething方法,开启一个异步操作,这样就达到每30s不管是否执行成功,都会重新执行dosomething()

sleep(30s);
}
------解决方案--------------------
学习
------解决方案--------------------
while(true)
{
new Thread(new ThreadStart(functionname)).Start();
Thread.Sleep(30);
}
有可能你这个function死掉了,或者需要长时间处理,把主线程阻塞了,所以建议用新开一个线程来执行操作,主线程就不会被阻塞了
------解决方案--------------------
应该是你建立线程就出了问题
------解决方案--------------------
到下面来了,帮你顶上去
------解决方案--------------------
应该还有更好实现的办法
我不太懂
帮顶
------解决方案--------------------
Timer 触发的事件用异步来完成