C# 启动windows服务时,请启动线程。我怎样才能做到这一点?
我正在创建一个窗口服务,但当它启动时,我希望它创建线程来保持ftp站点的池/监视器。我面临的问题是,当我尝试使用while(true){}启动服务时,在该服务中检查新文件,然后它应该线程池。QueueUserWorkItem,该服务在启动时有超时问题。在service OnStart方法中不应该有无限while循环。该方法应尽快完成。使用它设置服务线程/任务,但不要执行任何将无限期阻塞的操作 在没有任何异常处理、线程池等的情况下,我过去是这样做的(上次我写这样一个线程服务是5年前的事,所以如果它过时了就不必道歉。现在我尝试使用Task Parallel lib),读者注意:我只是在演示这个想法,并从一个旧项目中获得了这个想法。如果您可以做得更好,请随意编辑以改进此答案,或添加您自己的答案C# 启动windows服务时,请启动线程。我怎样才能做到这一点?,c#,multithreading,windows-services,threadpool,C#,Multithreading,Windows Services,Threadpool,我正在创建一个窗口服务,但当它启动时,我希望它创建线程来保持ftp站点的池/监视器。我面临的问题是,当我尝试使用while(true){}启动服务时,在该服务中检查新文件,然后它应该线程池。QueueUserWorkItem,该服务在启动时有超时问题。在service 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
}
}
你能提供一些你想做的事情的示例代码吗?这可以作为一个控制台应用程序,通过Windows Scheduler按计划运行吗?你的
while(true)
循环在哪里?您的服务的“start”方法需要立即返回,因此在该方法中放置一个无限循环当然不是一个好主意。正如DVK所指出的,没有代码,很难对代码的错误进行评论。请分享您的代码。通常,您应该只在OnStart事件处理程序上执行设置/初始化。您可以从OnStart启动多个线程,但不希望在无休止的循环中执行某些操作。