在我的Window Service应用程序中,永远不会调用计时器功能。我在我的机器上部署了服务,然后将服务附加到Visual Studio,并在不同的功能上使用断点。 OnStart()
之后我的所有函数都没有被调用。
这是我的OnStart()
功能
protected override void OnStart(string[] args)
{
this.timer = new System.Timers.Timer(50000);
this.timer.AutoReset = true;
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
this.timer.Start();
}
更新于09/12/2017:在try和catch中添加了事件日志
然后,此函数调用timer1_tick()
:
private void timer1_Tick(object sender, EventArgs e)
{
try
{
EventLog.WriteEntry("Running.."+ e.ToString());
}
catch (Exception ex)
{
EventLog.WriteEntry("Caught Exception "+ex.ToString(), EventLogEntryType.Error);
}
}
永远不会调用timer1_tick
。有什么建议吗?
2009年12月12日更新:我查看了事件日志。在Windows日志下>应用程序,我可以看到消息,服务启动成功。但是,不会显示try-catch块中添加的事件日志。不确定我是否遗漏了什么。
我将服务附加到Visual Studio进行调试。在下图中,调用OnStart()
方法。我刚刚添加了Thread.Sleep(30000)
,以便我有一些缓冲时间将进程附加到调试器,以避免跳过OnStart()
函数
Timer启动后,我在TimerTick()函数上有一个断点,期望它被命中,但它永远不会
答案 0 :(得分:2)
timer1_Tick
可能会被调用,因为OnStart
中的所有内容似乎都合适。也许你没有收到电子邮件的原因是因为_SendEmail
正在抛出异常。
写EventLog
可能会提供更多信息吗?
private void timer1_Tick(object sender, EventArgs e)
{
try
{
SendMail._SendMail("Processing A started at" + DateTime.Now.ToString());
Logging.log.LogInput("start refund process");
}
catch (Exception ex)
{
EventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
}
}
作为最佳做法,我还会写信至EventLog
和OnStart
中的OnStop
。
protected override void OnStart(string[] args)
{
// Log a service start message to the Application log.
EventLog.WriteEntry("My Service in OnStart.");
timer = new System.Timers.Timer(50000);
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick);
timer.Start();
}
protected override void OnStop()
{
// Log a service stop message to the Application log.
EventLog.WriteEntry("My Service in OnStop.");
}