代码之家  ›  专栏  ›  技术社区  ›  Rob Stevenson-Leggett

Windows服务:OnStart循环-是否需要委派?

  •  20
  • Rob Stevenson-Leggett  · 技术社区  · 15 年前

    我有一个Windows服务,它每N秒扫描一个文件夹以查找更改。我在尝试启动时收到“服务没有及时响应启动命令”。

    我有一个这样的循环开始:

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

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

    2 回复  |  直到 15 年前
        1
  •  40
  •   Marc Gravell    15 年前

    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
        }
    
        2
  •  6
  •   Darin Dimitrov    15 年前

    OnStart方法不应阻塞。您需要生成一个将执行该任务的工作线程。你也可以看看 FileSystemWatcher 类扫描文件系统更改通知。