如何禁用Windows服务C#的超时?

时间:2012-10-15 15:42:34

标签: c# windows-services timeout

我有一个运行并启动良好的Windows服务,但是,它运行一个后台线程(其中多个)进行一些严肃的计算。

经过一番挖掘后,我发现这是由于所有Windows服务都有超时。目前,它从数据库中的表中读取,将其加载到对象中,然后对所述对象进行一些分析。这一切都在OnStart方法中完成,然后调用其他方法。是否有一些技巧可以保持服务运行或任何方式停止超时而无需进入注册表?感谢

2 个答案:

答案 0 :(得分:5)

OnStart函数不是需要很长时间才能执行的逻辑的地方。基本上,您需要在OnStart函数之外为逻辑创建一个类。您需要公开声明一个输入功能 - 即获取数据并开始处理数据的功能。

e.g。

class ProcessingClass()
{
    public void ThreadStartProc()
    {
         GetData();
         StartProcessing();
    }
 }

在onStart方法中,创建一个新的Thread并将ThreadStart设置为ThreadStartProc函数。 e.g。

Thread ProcessingThread;
ProcessingClass procClass = new ProcessingClass();

protected override void OnStart(string[] args)
{
    ProcessingThread = new Thread(new ThreadStart(procClass.ThreadStartProc));
    ProcessingThread.Start();
}

protected override void OnStop()
{
     if (ProcessingThread != null)
     {
          ProcessingThread.Abort();
          ProcessingThread.Join();
          ProcessingThread = null;
     }
}

在您的处理类中,您需要处理在服务停止时将抛出的ThreadAbortException。

答案 1 :(得分:4)

  1. 将您的逻辑移出OnStart方法。
  2. 使用Service.RequestAdditionalTime()方法。
  3. 请参阅此答案:windows service startup timeout