在Windows服务中执行冗长的初始化

Nic*_*yer 5 .net c# windows-services startup

在不阻止服务控制管理器的情况下启动Windows服务(或暂停恢复)时进行冗长初始化的最佳方法是什么?

LBu*_*kin 9

您可以使用a BackgroundWorker来执行冗长的操作以响应Service.Start事件.

OnStart()你的ServiceBase派生类的方法中这样做很容易.在MSDN上也有一个合理的好例子.

protected override void OnStart(string[] args)
{
    var worker = new BackgroundWorker();
    worker.DoWork += DoSomeLongOperation;

    worker.RunWorkerAsync();
}

private void DoSomeLongOperation(object sender, DoWorkEventArgs e)
{
   // do your long operation...
}
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以订阅ProgressChangedRunWorkerCompleted事件,以便您可以通知服务控制管理器您的进度和启动成功(或失败).