启动windows服务时,请启动线程处理.我怎样才能做到这一点
本文关键字:启动 这一点 处理 服务 windows 线程 | 更新日期: 2023-09-27 18:28:06
我正在创建一个窗口服务,但当它启动时,我希望它创建线程来保持ftp站点的池/监视器。我面临的问题是,当我尝试用while(true){}启动服务时,其中会检查新文件,然后应该ThreadPool.QueueUserWorkItem,服务在启动时会出现超时问题。
服务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
}
}