2017-03-08 8 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(); 
    } 
} 
関連する問題