2016-10-18 50 views
1

我们有一个作为windows服务执行的进程, 这个过程作为接口服务器处理传入消息,将它们转换并发送到另一个接口。什么时候视窗服务被认为是“开始”

这是一个相当繁重的过程,它需要将很多东西加载到内存中,并且需要一些时间(几分钟)。因为它的性质,当我们使用它的Windows服务启动它时,即使我们可以看到该进程已经工作并且处理消息就好了,它仍然处于“开始”状态很长一段时间(有时甚至超过20分钟) 通过它的日志)。

所以问题是 - 什么时候服务被认为是“开始”,什么时候被认为是“开始”?基于哪些因素?

+0

每个Windows服务都使用SetServiceStatus函数将其状态报告给服务控制管理器。当它告诉Windows它已经启动时,该服务被认为是“开始”的,当这种情况发生时,这完全取决于程序员。 (如果您使用的是.NET框架提供的ServiceBase类,则该服务会报告OnStart函数返回时立即启动该服务。) –

回答

1

onstart完成时起始状态结束。

你应该在onstart事件后写入开始代码。

puclic class Service1 
{ 
     private Timer timer = new Timer(); 

     protected override void OnStart(string[] args) 
     { 
      this.timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); 
      this.timer.Interval = 1 * 1000; // 1 second 
      this.timer.Enabled = true; 
     } 

     private void OnElapsedTime(object source, ElapsedEventArgs e) 
     { 
      this.timer.Enabled = false; // OnElapsedTime run only one time 

      // Write your code 
     } 
} 
+0

您假设OP正在讨论.NET服务。没关系,但你应该明确地这样说。 –

+0

谢谢!这确实是一个.NET服务,我应该提到这一点。 我确实看到我们在代码中有这个OnStart覆盖,现在我可以看到大部分时间消耗哪些区域。 – SwiftHands

相关问题