c#出现timer线程跑丢的情况,网上有说明需要线程重启来解决问题,请提供举例代码。

c#出现timer线程跑丢的情况,网上有说明需要线程重启来解决问题,请提供举例代码。... c#出现timer线程跑丢的情况,网上有说明需要线程重启来解决问题,请提供举例代码。 展开
 我来答
kingboyf4
2013-12-13 · TA获得超过283个赞
知道小有建树答主
回答量:201
采纳率:100%
帮助的人:240万
展开全部
1。 System.Windows.Forms.Timer , 该 Timer 必须在 Winform 程序中使用,依赖于某个窗体。 因为该 Timer的时间由系统的Timer 消息发送到窗口,然后由窗口的 主 UI 线程进行处理。由于窗口的消息又先后顺序,并且处理的时候也是顺序同步的,因此当窗体的主ui线程正在执行其他的消息时, Timer的时间就会被丢弃。 由于该Timer时间的处理代码直接运行在窗体主UI 线程中,可以直接访问窗体上的控件。

2。System.Timers.Timer , 该Timer 与 System.Windows.Forms.Timer 原理机制比较相近,但是该Timer 不依赖于winform,可以是用在Component 或者一般的class里。并且该Timer的事件默认执行在一个线程池中的工作线程(worker thread)中。如果我们需要让代码执行在某个特定线程中(比如窗体的主UI线程),需要通过设置Timer的SynchronizingObject 属性。同时,由于这个Timer 会将所有的时间触发 event都 queue在一个队列中, 不会像 Windows.Forms.Timer 那样一但主消息线程忙,就会丢失事件。

3。System.Threading.Timer , 这个Timer 总的来讲是对具体应用环境以来最小的,所以可以在任何多线程环境中是用的Timer。 时间处理代码也是在线程池中的线程上执行。但是由于灵活性,它就没有提供很多现有的比如 直接访问 窗体控间,或者 通过设置 SynchronizingObject 属性 来指定执行线程。在对线程环境中我们需要自己编码来提供代码的同步,互斥等安全性。

上面的说明,表示只有第一种会有丢失现象,同时我们也能够接受。
追问
System.Windows.Forms.Timer 跑几天了,在定时执行一些任务,跑几天进程还在,但是程序不执行了。程序是一直打开的,最早半天,或者3,4天timer 就没有反应了。求高手解决。
追答
如果可以DEBUG,那就附加进程DEBUG下。
要么就是通过写日志,来追踪问题所在
bxfc
2013-12-13 · TA获得超过872个赞
知道小有建树答主
回答量:1104
采纳率:0%
帮助的人:683万
展开全部
说下你的处理逻辑,或者代码发出来看下。通常资源不起冲突不会发生这种问题。
追问
只是简单的从本地读取数据,然后存到远程mysql服务器上面。定时存取的。没有错误呀。但是System.Windows.Forms.Timer 跑着跑着也没有报错,就休眠了
追答
肯定是有异常的地方,导致在执行过程中出错,没有正常启动Timer,TryCatch加Log看下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式