那么您认为防止 C# Windows 服务的多个线程同时运行的最佳方法是什么(该服务使用 timer
和 OnElapsed
事件)?
使用 lock()
或 mutex
?
我似乎无法理解 mutex
的概念,但使用 lock()
似乎很适合我的情况。
无论如何,我是否应该花时间学习如何使用 mutex
?
最佳答案
使您的计时器成为一次性计时器,并在 elapsed 事件处理程序中重新初始化它。例如,如果您正在使用 System.Timers.Timer
,您可以像这样初始化它:
myTimer.Elapsed = timer1Elapsed;
myTimer.Interval = 1000; // every second
myTimer.AutoReset = false; // makes it fire only once
myTimer.Enabled = true;
还有你的 elapsed 事件处理程序:
void timerElapsed(object source, ElapsedEventArgs e)
{
// do whatever needs to be done
myTimer.Start(); // re-enables the timer
}
这样做的缺点是计时器不会以一秒为间隔触发。相反,它会在最后一个报价单的处理完成后一秒钟触发。
关于c# - 防止服务的多个实例 - 最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441368/