Windows服务中的方法调用顺序

Ada*_*dam 10 c# windows-services

在Windows服务中调用方法的顺序是什么?我们遇到了时间问题,我认为这是由于构造函数花了太长时间才完成处理.

这是一个类似的问题,我认为我们遇到 错误1053服务没有响应启动或控制请求

但是,我们想知道什么顺序以及何时调用Main,OnStart,InitializeComponent等方法和/或何时应该调用它们.

同样,OnStart方法是否是放置所有处理的最佳位置?

**解

花了一些时间来制作一个测试服务并测试下面的响应,发现超时来自Main方法处理以及在Main方法中调用的构造函数导致它超时.将所有内容移动到OnStart以及旋转线程似乎都有效.细节在这里.http://www.adamthings.com/post/2012/06/28/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a-timely-时尚/

Jus*_*ony 6

我相信订单是

至于在何处放置代码,我建议将任何可以缓存的代码放入其中Main,并在每个内部开始循环使用的任何代码OnStart.但是,您不应该进行任何实际处理OnStart,只需初始化即可.使用单独的线程来完成大部分逻辑.

此外,MSDN对此有帮助


jgl*_*uie 6

不要阻止OnStart()方法.听起来你在做这件事.

OnStart()方法中创建一个单独的线程并离开那里.

我没有测试过这个,但类似于:

protected override void OnStart(string[] args)
{
    var worker = new Thread(DoWork);
    worker.IsBackground = false;
    worker.Start();

    base.OnStart(args);
}

private void DoWork()
{
    while (!_stopRequested)  // (set this flag in the OnStop() method)
    {
        // processing goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

要回答有关事件顺序的问题,只需在每个方法中设置Trace语句.我不确定会有多大帮助.您获得的消息(服务未响应启动请求...)表示在应该相对快速执行的方法中阻塞(或花费太长时间).