启动windows服务时,请启动线程处理.我怎样才能做到这一点

本文关键字:启动 这一点 处理 服务 windows 线程 | 更新日期: 2023-09-27 18:28:06

我正在创建一个窗口服务,但当它启动时,我希望它创建线程来保持ftp站点的池/监视器。我面临的问题是,当我尝试用while(true){}启动服务时,其中会检查新文件,然后应该ThreadPool.QueueUserWorkItem,服务在启动时会出现超时问题。

启动windows服务时,请启动线程处理.我怎样才能做到这一点

服务OnStart方法中不应该有无限while循环。该方法应尽快完成。使用它可以设置服务线程/任务,但不能执行任何将无限期阻塞的操作。

在没有任何异常处理、线程池等的情况下,以下是我过去的做法(我上一次写这样的线程服务是在5年前,所以如果它已经过时了,请不要道歉。现在我尝试使用任务并行库),读者注意:我只是在演示这个想法,并从一个旧项目中获得了这个想法。如果你能做得更好,可以随意编辑以改进这个答案,或者添加你自己的答案。

public partial class GyrasoftMessagingService : ServiceBase
{
  protected override void OnStart(string[] args)
  {
     ThreadStart start = new ThreadStart(FaxWorker); // FaxWorker is where the work gets done
     Thread faxWorkerThread = new Thread(start);
     // set flag to indicate worker thread is active
     serviceStarted = true;
     // start threads
     faxWorkerThread.Start();
  }
  protected override void OnStop()
  {
     serviceStarted = false;
     // wait for threads to stop
     faxWorkerThread.Join(60);
     try
     {
        string error = "";
        Messaging.SMS.SendSMSTextAsync("5555555555", "Messaging Service stopped on " + System.Net.Dns.GetHostName(), ref error);
     }
     catch
     {
        // yes eat exception if text failed
     }
  }
  private static void FaxWorker()
  {
     // loop, poll and do work
  }

}
相关文章: