日期:2014-05-19  浏览次数:20748 次

单线程实现类似Timer的间隔处理
Timer应该是多线程的,每到一定的时间就触发事件,不会管上一次执行是否成功

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

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


------解决方案--------------------
利用单线程完成,自然就要设计到线程的安全。

你可以跟踪到代码,看看是否二次激发,还是干脆卡在了第一次的运行中;
==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
优惠接单开发,收费带初学者,组件控件定制开发,成品源代码批发
联系方式:Q64180940(请清楚注明业务还是技术咨询) 全天在线
==================================================================
------解决方案--------------------
看了一下,说几点想法:
1. 不应该在UI线程Sleep 30s,这样会让你的UI无响应。
2. 建议在UI线程外单起一个工作线程,方法可以用
(1) BackgroundWorker类,.NET 提供的专门用于做后台工作的类
(2) 直接new Thread(),效果一样,不过没有BackgroundWorker类那么好控制。
3. 如果用Timer,建议用以下方式试试:
(1) 写一个delegate,将你的操作写在其中
(2) 起一个Timer,每30秒去触发这个delegate,需要注意的是这个delegate最好用异步形式(BeginInvoke)

以上属于个人看法,仅供参考
------解决方案--------------------
neucf()
---
同意,调用的应该是一个委托,其他的不一定能执行
------解决方案--------------------
用单独线程比较好。或用线程池。
------解决方案--------------------
我感觉还是用委托比较好些。
------解决方案--------------------
呵呵,今天刚好了一个跟这个差不多的东西,拿出来分享一下
thread = New Threading.Thread(AddressOf 你的函数名字)

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

此处省略........
把你的代码写在这个死循环里面,它就每隔30秒执行一次你想要做的事情啦
------解决方案--------------------
哦,我忘记了,这个是用vb.net写的;不过c#和这个差不多;大同小异


------解决方案--------------------
不懂,帮顶
------解决方案--------------------
用BackgroundWorker 或者 线程池,你的UI就不会死了