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

dotnetbus 2007-07-31 04:00:59


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

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

问题在于窗体会不再响应,看任务管理器
应用也会显示没有反应
感觉好像性能不高效,有什么好的方法没有?
...全文
266 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigmingming 2007-08-01
  • 打赏
  • 举报
回复
Timer 触发的事件用异步来完成
LutzMark 2007-08-01
  • 打赏
  • 举报
回复
应该还有更好实现的办法
我不太懂
帮顶
dotnetbus 2007-08-01
  • 打赏
  • 举报
回复
现在用的是和hbcbsxw一样
不过如果在UI的一个button事件中用thread = New Threading.Thread(AddressOf 你的函数名字)
那么你的UI就会没有回应了
所以我担心死循环会不会影响到CPU的性能
不过毕竟我还让线程 Sleep 了 30 秒

现在还是让没有用UI,在windows service中用这个无限循环

这个是不是最佳的
godgreat 2007-07-31
  • 打赏
  • 举报
回复
到下面来了,帮你顶上去
fangbuge 2007-07-31
  • 打赏
  • 举报
回复
应该是你建立线程就出了问题
wangsaokui 2007-07-31
  • 打赏
  • 举报
回复
while(true)
{
new Thread(new ThreadStart(functionname)).Start();
Thread.Sleep(30);
}
有可能你这个function死掉了,或者需要长时间处理,把主线程阻塞了,所以建议用新开一个线程来执行操作,主线程就不会被阻塞了
foyuan 2007-07-31
  • 打赏
  • 举报
回复
哦。看错了,不好意思。
=====================

没有吧??
应该就这样吧
honey52570 2007-07-31
  • 打赏
  • 举报
回复
学习
hadoopstudy 2007-07-31
  • 打赏
  • 举报
回复
开启一个线程
while(true)
{
dosomething();
//如果是同步方式,会一直等到该方法执行完成再执行。
如果方法执行20s就是50s后再执行了
//可以采用异步解决你说的问题 在线程中对dosomething方法,开启一个异步操作,这样就达到每30s不管是否执行成功,都会重新执行dosomething()

sleep(30s);
}
北京的雾霾天 2007-07-31
  • 打赏
  • 举报
回复
哦。看错了,不好意思。
北京的雾霾天 2007-07-31
  • 打赏
  • 举报
回复
sleep 30 秒的过程,你应该使用Application.DoEvents()来让系统执行当前的其它的操作,否则界面就是像“死”了一样。

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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