我有一个Windows服务,每n秒扫描一个文件夹进行更改。当我试图启动它时,我得到“服务没有及时响应启动命令”。
我在OnStart中设置了循环,如下所示:
public void OnStart(string[] args)
{
while (!_shouldExit)
{
//Do Stuff
//Repeat
Thread.Sleep(_scanIntervalMillis);
}
}
这是导致错误的原因吗?我应该委托这种方法吗?
答案 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类以扫描文件系统更改通知。