繁体   English   中英

每隔一分钟运行一次Windows服务

[英]Running the windows service for every one minute

我试图每1分钟运行一次服务,但我成功完成了该工作,但问题是它每分钟启动一次,而不管程序是否完成。 我是这样写的

    private Timer _timer;
    private DateTime _lastRun = DateTime.Now.AddDays(-1);
    public SpotlessService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        _timer = new Timer(1 * 60 * 1000); // every 1 hour
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        _timer.Start();


    }

    public void Start()
    {
        OnStart(new string[0]);
    }
    void timer_Elapsed(object sender, EventArgs e)
    {
        Util.LogError("Started at" + DateTime.Now + "");

        FileDownload objdwn = new FileDownload();
    }

我已经将其托管为服务,FileDownload类构造函数将从服务器下载一些文件,并将数据复制到数据库中,这大约需要10-15分钟。 因此,我需要做的是停止计时器,直到这15分钟为止,服务应重新启动,并应等待下一分钟,然后执行相同的操作。 这可能还是我应该更大程度地增加计时器值

Stop()计时器在Elapse事件的开头,Start()计时器在结尾。 还要确保您的计时器对象不会被垃圾收集。

private Timer _timer;
private DateTime _lastRun = DateTime.Now.AddDays(-1);
public SpotlessService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    _timer = new Timer(1 * 60 * 1000); // every 1 minute
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    _timer.Start();


}

public void Start()
{
    OnStart(new string[0]);
}
void timer_Elapsed(object sender, EventArgs e)
{
    _timer.Stop();

    Util.LogError("Started at" + DateTime.Now + "");

    FileDownload objdwn = new FileDownload();

    _timer.Start()
}

我的建议是使用Task执行下载,并在完成后立即再次调用main方法。

public void mainMethod() 
{
    Thread.Sleep(60000);
    doDownload();
}

public void doDownload() 
{
    Task.Factory.StartNew(() => {
        // Background download
    }).ContinueWith(task => mainMethod());
}

如果需要,这将允许您在下载过程中在主线程中执行任何其他操作。

要么

下载完成后,您可以停止计时器并再次运行

void timer_Elapsed(object sender, EventArgs e)
{
    _timer.Stop();
    Util.LogError("Started at" + DateTime.Now + "");

    FileDownload objdwn = new FileDownload();
    _timer.Start();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM