我想每 10 秒从 Windows 服务调用一个业务层方法(使用 C# 和 .NET 完成)。但是,我不想使用 Timer_Elapsed 事件,因为如果第一个线程/进程仍在运行,它会启动另一个线程/进程。我只需要一个单线程方法,因为对同一业务方法的多次调用会产生不必要的复杂性。
所以我在 on_start 中添加了一个 do--while 循环。我知道这不是正确的方法,因为它会产生这个进程,如果服务关闭,该进程将成为孤儿进程。
我该如何解决这个问题?
问候,
泽克
还有另一种获得定时执行的方法,WaitHandle.WaitOne() 方法提供超时参数。这在服务中非常有效,因为它可以让您实现停止服务的需要and在单个方法调用中定期执行。模板如下所示:
Thread Worker;
AutoResetEvent StopRequest = new AutoResetEvent(false);
protected override void OnStart(string[] args) {
// Start the worker thread
Worker = new Thread(DoWork);
Worker.Start();
}
protected override void OnStop() {
// Signal worker to stop and wait until it does
StopRequest.Set();
Worker.Join();
}
private void DoWork(object arg) {
// Worker thread loop
for (;;) {
// Run this code once every 10 seconds or stop right away if the service
// is stopped
if (StopRequest.WaitOne(10000)) return;
// Do work...
//...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)