1、用Timer控制每隔多长时间运行一次
Windows服务使用Timer控件并不是在工具箱上拖拽过来的,
而是System.Windows.Forms命名空间下的组件,即使用的Timer应该是System.Timers.Timer.
解决方法:
方法一:打开"工具箱"---右键---"选择项"---筛选器输入system.time
这个Timer控件的属性是system.Timer下的。不是System.Windows.Form。
方法二:
直接在后台手动新建一个timer,并设置其属性和事件。
public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { System.Timers.Timer timer1 = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为1000毫秒; timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//到达时间的时候执行事件; timer1.AutoReset = true;//设置是执行一次(false)还是一直执行(true); timer1.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; } protected override void OnStop() { timer1.Enabled = false; } private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //此处添加服务需要执行的代码 }
2、控制定点运行Windows服务
例如在12点运行服务
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
System.Timers.Timer timer1 = new System.Timers.Timer(60*60*1000);//实例化Timer类,设置间隔时间为1小时;
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//到达时间的时候执行事件;
timer1.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
timer1.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
}
protected override void OnStop()
{
timer1.Enabled = false;
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now.Hour == 12)
{
//执行代码
}
}
3、不设置时间
不设置运行时间,可以设置一个线程。
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
transfer_thread = new Thread(new ThreadStart(run_transfer));
transfer_thread.Start();
}
protected override void OnStop()
{
transfer_thread.Abort();
}