【发布时间】:2023-03-20 04:46:01
【问题描述】:
我必须在 Windows 服务中每 n 分钟运行一次函数。完成后,重新开始。如果该功能已启动,则在完成之前无法再次启动。最初我有这样的想法:
void function()
{
while(true)
{
if(!is_running)
{
function_to_be_repeated();
is_running = false;
}
else
{
Thread.Sleep(some_time); // wait to start again
}
}
}
然后我发现了这个http://www.albahari.com/threading/part3.aspx:
bool running = false;
static void Main()
{
// First interval = 5000ms; subsequent intervals = 1000ms
Timer tmr = new Timer (function_to_be_repeated, "...", 5000, 1000);
Console.ReadLine();
tmr.Dispose(); // This both stops the timer and cleans up.
}
static void function_to_be_repeated(object data)
{
if(!running)
{
running = true;
// do some stuff...
running = false;
}
}
但是当我按下 Enter 时它停止了
还有其他更好的实现方式吗?
【问题讨论】:
-
“但是当我按下 Enter 时它会停止” - 是的,这就是代码的作用。现在你有问题了吗?
-
我倾向于将
AutoResetEvent用于计时器,而不是使用Thread.Sleep,而且效果相当好。我不能说它是否是建议的解决方案,但它为我提供了一种更轻松的解决方案。 -
.NET 中有很多不同的类,名为
Timer(在不同的命名空间中)。你用的是哪一个?
标签: c# windows windows-services