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-时尚/
我相信订单是
Main(Main几乎是Windows中每个应用程序的入口点,不包括服务)Main应该打电话)InitializeComponentOnStart(这真的叫按需...基本上,当开始叫...所以为什么Main和InitializeComponent事前发生的)至于在何处放置代码,我建议将任何可以缓存的代码放入其中Main,并在每个内部开始循环使用的任何代码OnStart.但是,您不应该进行任何实际处理OnStart,只需初始化即可.使用单独的线程来完成大部分逻辑.
此外,MSDN对此有帮助
不要阻止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语句.我不确定会有多大帮助.您获得的消息(服务未响应启动请求...)表示在应该相对快速执行的方法中阻塞(或花费太长时间).