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

dotnetbus 2007-07-31 04:00:01
Timer应该是多线程的,每到一定的时间就触发事件,不会管上一次执行是否成功

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

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

这个是不是最佳的
xwk789xwk 2007-07-31
  • 打赏
  • 举报
回复
不懂,帮顶
hbcbsxw 2007-07-31
  • 打赏
  • 举报
回复
哦,我忘记了,这个是用vb.net写的;不过c#和这个差不多;大同小异

hbcbsxw 2007-07-31
  • 打赏
  • 举报
回复
呵呵,今天刚好了一个跟这个差不多的东西,拿出来分享一下
thread = New Threading.Thread(AddressOf 你的函数名字)

此处省略........
While True
...........................
System.Threading.Thread.CurrentThread.Sleep(3000)
End While

此处省略........
把你的代码写在这个死循环里面,它就每隔30秒执行一次你想要做的事情啦
Koala_sea 2007-07-31
  • 打赏
  • 举报
回复
我感觉还是用委托比较好些。
通者归来 2007-07-31
  • 打赏
  • 举报
回复
用单独线程比较好。或用线程池。
xuan.ye 2007-07-31
  • 打赏
  • 举报
回复
neucf()
---
同意,调用的应该是一个委托,其他的不一定能执行
neucf 2007-07-31
  • 打赏
  • 举报
回复
看了一下,说几点想法:
1. 不应该在UI线程Sleep 30s,这样会让你的UI无响应。
2. 建议在UI线程外单起一个工作线程,方法可以用
(1) BackgroundWorker类,.NET 提供的专门用于做后台工作的类
(2) 直接new Thread(),效果一样,不过没有BackgroundWorker类那么好控制。
3. 如果用Timer,建议用以下方式试试:
(1) 写一个delegate,将你的操作写在其中
(2) 起一个Timer,每30秒去触发这个delegate,需要注意的是这个delegate最好用异步形式(BeginInvoke)

以上属于个人看法,仅供参考

111,098

社区成员

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

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

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