2011-05-12 09:08 Windows服务中Timer组件Tick无法触发解决方法

本文针对Windows服务中Timer组件Tick无法触发的问题,提供了详细的解决方案。通过使用System.Timers.Timer替代System.Windows.Forms.Timer,成功实现了定时任务在服务中的稳定运行。

Windows服务中Timer组件Tick无法触发解决方法

具体原因,微软自称是Framework的bug,具体原因在service 中,应该不能运行Windows.Forms,但是无论是windows窗体中timer还是组件中的timer都是继承自System.Windows.Form.Timer,并不是我们需要的System.Timers ,继承自System.Timers 的timer只有手动创建

public Service1() { InitializeComponent();

System.Timers.Timer t = new System.Timers.Timer(200);//实例化Timer类,设置间隔时间为10000毫秒;

 t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;

 t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

 t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; }

public void theout(object source, System.Timers.ElapsedEventArgs e)

 {

SqlConnection conn = new SqlConnection("Server=.;UID=eaglesoft;PWD=password;DataBase=exchange");

SqlCommand comm = new SqlCommand("INSERT INTO op_album(album_name,album_score,album_picscr) VALUES ('1','2','3')", conn); conn.Open(); comm.ExecuteNonQuery(); conn.Close();

 }

这样就可以触发Elapsed事件了,注册服务一切正常,能触发该事件。

总结:  在Visual Studio 中提供了三种类型的Timer: System.Windows.Forms.Timer 基于windows 的计时器,运行于Windows 窗体程序中。 System.Timers.Timer       基于服务的计时器,运行于服务器环境中。 System.Threading.Timer     基于线程的计时器,使用回调方法而不是使用事件,并由线程池线程提供支持。 在Visual Studio 2003的工具箱里面默认提供了System.Windows.Forms.Timer和System.Timers.Timer两种,而Visual Studio 2005 或者2008中却只默认提供了System.Windows.Forms.Timer这一种,所以在vs 2005或者VS2008的windows service 中使用计时器时,必须手工修计时器定义,计时器才能正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值