Windows服务:OnStart循环 – 我需要委托吗?

我有一个Windows服务,每n秒扫描一个文件夹进行更改。 当我试图启动它时,我得到“服务没有及时响应启动命令”。

我在OnStart中设置了一个循环,如下所示:

public void OnStart(string[] args) { while (!_shouldExit) { //Do Stuff //Repeat Thread.Sleep(_scanIntervalMillis); } } 

这是导致错误的原因吗? 我应该委托这种方法吗?

OnStart应该只开始工作; 它不负责这样做。 这通常意味着产生一个新线程来完成实际工作。 预计OnStart会迅速完成。 例如:

  public void OnStart(string[] args) // should this be override? { var worker = new Thread(DoWork); worker.Name = "MyWorker"; worker.IsBackground = false; worker.Start(); } void DoWork() { // do long-running stuff } 

OnStart方法不应该阻止。 您需要生成一个可以完成工作的工作线程。 您还可以查看FileSystemWatcher类以扫描文件系统更改通知。