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

时间:2009-03-16 10:52:58

标签: c# .net windows-services

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

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

 public void OnStart(string[] args)
 {
    while (!_shouldExit)
    {
        //Do Stuff

        //Repeat
        Thread.Sleep(_scanIntervalMillis);
    }
 }

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

2 个答案:

答案 0 :(得分:40)

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
    }

答案 1 :(得分:6)

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