[英]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.