C# 每一分钟运行一次windows服务
我曾尝试每1分钟运行一次服务,并成功地做到了这一点,但问题是无论程序是否完成,它都会每分钟启动一次。我是这样写的C# 每一分钟运行一次windows服务,c#,timer,windows-services,C#,Timer,Windows Services,我曾尝试每1分钟运行一次服务,并成功地做到了这一点,但问题是无论程序是否完成,它都会每分钟启动一次。我是这样写的 private Timer _timer; private DateTime _lastRun = DateTime.Now.AddDays(-1); public SpotlessService() { InitializeComponent(); } protected override void OnStart(
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分钟,服务应该再次启动,应该等待下一分钟,并做同样的事情。这是可能的,还是我应该更大程度地增加计时器值在消逝事件开始时停止()计时器,在结束时启动()计时器。还要确保计时器对象不会被垃圾回收
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();
}
我怎么能确定_定时器不会被垃圾收集器处理?我能相信这个密码吗?至少,我该如何测试它?非常感谢。