C# 启动windows服务时,请启动线程。我怎样才能做到这一点?

C# 启动windows服务时,请启动线程。我怎样才能做到这一点?,c#,multithreading,windows-services,threadpool,C#,Multithreading,Windows Services,Threadpool,我正在创建一个窗口服务,但当它启动时,我希望它创建线程来保持ftp站点的池/监视器。我面临的问题是,当我尝试使用while(true){}启动服务时,在该服务中检查新文件,然后它应该线程池。QueueUserWorkItem,该服务在启动时有超时问题。在service OnStart方法中不应该有无限while循环。该方法应尽快完成。使用它设置服务线程/任务,但不要执行任何将无限期阻塞的操作 在没有任何异常处理、线程池等的情况下,我过去是这样做的(上次我写这样一个线程服务是5年前的事,所以如果它

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

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

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

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
  }


}

你能提供一些你想做的事情的示例代码吗?这可以作为一个控制台应用程序,通过Windows Scheduler按计划运行吗?你的
while(true)
循环在哪里?您的服务的“start”方法需要立即返回,因此在该方法中放置一个无限循环当然不是一个好主意。正如DVK所指出的,没有代码,很难对代码的错误进行评论。请分享您的代码。通常,您应该只在OnStart事件处理程序上执行设置/初始化。您可以从OnStart启动多个线程,但不希望在无休止的循环中执行某些操作。