2017-03-08 57 views

回答

0

您可以使用Quartz調度庫。它支持CRON觸發器。所以,你可以定義一個簡單的工作,如:

public class Sqljob : IJob 
{ 
    #region Constructors 

    public Sqljob() 
    {  
    } 

    #endregion 

    #region IJob members 

    public void Execute(IJobExecutionContext context) 
    { 
     // Perform your SQl work here 
    } 

    #endregion 
} 

而且有一個調度程序實例化和與觸發一起調度作業:

public class TaskScheduler : ITaskScheduler 
{ 
    #region Private fields 

    private readonly IScheduler _scheduler; 

    #endregion 

    #region Constructors 

    public TaskScheduler(IScheduler scheduler) 
    { 
     _scheduler = scheduler; 
    } 

    #endregion 

    #region ITaskScheduler members 

    public string Name 
    { 
     get { return this.GetType().Name; } 
    } 

    public void Run() 
    { 
     ScheduleSqlJob(); 

     _scheduler.Start(); 
    } 

    public void Stop() 
    { 
     if (_scheduler != null) _scheduler.Shutdown(true); 
    } 

    #endregion 

    #region Private methods 

    private void ScheduleSqlJob() 
    { 
     var jobDetails = JobBuilder.Create<Sqljob>() 
            .WithIdentity("Sqljob") 
            .Build(); 
     var trigger = TriggerBuilder.Create() 
            .StartNow() 
            .WithCronSchedule("// Get your CRON expression here")) 
            .Build(); 
     _scheduler.ScheduleJob(jobDetails, trigger); 
    }  

    #endregion 
} 

和您的服務可以調用類的調度:

public partial class MyService : ServiceBase 
{ 
    #region Fields 

    private readonly ITaskScheduler _taskScheduler; 

    #endregion 

    public MyService(ITaskScheduler taskScheduler) 
    { 
     InitializeComponent(); 
     _taskScheduler = taskScheduler; 
    } 

    protected override void OnStart(string[] args) 
    { 
     _taskScheduler.Run(); 
    } 

    protected override void OnStop() 
    { 
     _taskScheduler.Stop(); 
    } 
}