c# - 防止服务的多个实例 - 最佳方法?

标签 c# windows multithreading service

那么您认为防止 C# Windows 服务的多个线程同时运行的最佳方法是什么(该服务使用 timerOnElapsed 事件)?

使用 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/

相关文章:

c# - Xamarin Mono ClientWebSocket 实现不适用于安全套接字

c# - 使用 C# ServiceController 和模拟启动/停止 Windows 服务

c# - IXmlSerializable 和 XmlRootAttribute

c - 在 2 个线程之间交替

java - 是否可以使用 JUnit 测试多线程?

multithreading - 使用 Python 2.7 的 GAE 上的线程抛出 "FrontendsNotSupported"错误

c# - T4 模板不会随着构建而转换

windows - 无法将 GlassFish 作为服务运行

Windows 10 Creators Updates 破坏了 WinForms 应用程序/蓝屏死机

windows - 在 windows 上交叉编译 linux