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

Rob*_*ett 20 .net c# windows-services

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

我在OnStart中有一个循环启动,如下所示:

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

        //Repeat
        Thread.Sleep(_scanIntervalMillis);
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 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
    }
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 6

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