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

Bad*_*ral 3 c# windows-services timeout

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

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

Swo*_*ble 5

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

例如

class ProcessingClass()
{
    public void ThreadStartProc()
    {
         GetData();
         StartProcessing();
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

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