查看文章 |
一、 遇到什么问题? 有些软件,需要每隔一定时间做一些相同的事情,或者作为网络服务,像IIS、SQL Server等这样的软件。此种情况下,往往需要让软件在没有用户干预的情况下在服务器上运行。与此种程序交互往往需要通过网络协议进行。或者程序根本就不需要与用户交互。这种程序往往称为后台程序,或后台服务。 二、 Windows服务能做些什么? using System;
namespace ServiceBusiness { public class ServiceBusiness { public void Dothings() { //隔一段时间调用一次 } } } 向解决方案添加一个WindowsService.csproj ![]() 将Service1.cs重命名为Service.cs 给WindowsService添加ServiceBusiness项目引用 打开Service.cs代码视图,向Service类添加成员 ServiceBusiness.ServiceBusiness serviceBusiness; 在构造函数里面对serviceBusiness实例化 serviceBusiness = new ServiceBusiness.ServiceBusiness(); 在using位置添加System.Theading using System.Threading; 给Service类添加计时器 Timer serviceTimer; 添加TimeCallback方法,用于计时器调用 public void TimerCallback(object obj)
{ //隔一段时间调用一次 serviceBusiness.Dothings(); } 在OnStart()方法中添加方法,用于启动计时器 using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.Text; using System.Threading; namespace WindowsService { public partial class Service : ServiceBase { Timer serviceTimer; ServiceBusiness.ServiceBusiness serviceBusiness; int period; object state; public Service() { InitializeComponent(); serviceBusiness = new ServiceBusiness.ServiceBusiness(); } protected override void OnStart(string[] args) { //启动timer period = ServiceSettings.Default.ServiceTimerIntervalSecond * 1000; serviceTimer = new Timer(new TimerCallback(TimerCallback), state, 0, period); } protected override void OnStop() { //停止计时器 serviceTimer.Change(Timeout.Infinite, Timeout.Infinite); } protected override void OnContinue() { //重新开始计时 serviceTimer.Change(0, period); } protected override void OnPause() { //停止计时器 serviceTimer.Change(Timeout.Infinite, Timeout.Infinite); } public void TimerCallback(object obj) { //隔一段时间调用一次 serviceBusiness.Dothings(); } } } 打开Program.cs文件 using System.Collections.Generic;
using System.ServiceProcess; using System.Text; namespace WindowsService { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> static void Main(string[] args) { #if DEBUG ServiceBusiness.ServiceBusiness serviceBusiness = new ServiceBusiness.ServiceBusiness(); //在调试模式下,直接调用 serviceBusiness.Dothings(args); #else ServiceBase[] ServicesToRun = new ServiceBase[] { new Service() }; ServiceBase.Run(ServicesToRun); #endif } } } |


