Вам будет лучше использовать выделенный рабочий поток для этого бесконечного цикла.Если вы используете какой-либо тип сигнального механизма, например ManualResetEvent
, для регулирования цикла, то вы также можете заставить его остановиться.
public class YourService : ServiceBase
{
private ManualResetEvent StopRequested = new ManualResetEvent(false);
protected override void OnStart(string[] args)
{
new Thread(
() =>
{
while (!StopRequested.WaitOne(0))
{
// Infinite loop code goes here.
}
}).Start();
}
protected override void OnStop()
{
StopRequested.Set();
}
}
Хорошая особенность этого шаблона в том, что вы можете установить параметр timeoutна WaitOne
для настройки времени ожидания цикла между итерациями.По сути, это дает вам тот же эффект, что и мой таймер.