运行 计时器立即在 windows 服务中
Running timer immediately in a windows service
我在 VS.net C#
上创建了一个 windows 服务
在 OnStart 事件中我启动了一个计时器。
在计时器中,我调用了一个名为 DO()
的函数
DO()函数的过程很长(需要一个多小时)
流程应该是这样的
开始然后立即调用时间但由于定时器间隔需要再等一天
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart.");
try
{
Timer timer = new Timer();
timer.Interval = 1000 * 60 *60 * 24;
timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
timer.Start();
DO();
}
catch (Exception ex)
{
eventLog1.WriteEntry("ERROR (OnStart) : " + ex.ToString());
}
}
public void OnTimer(object sender, ElapsedEventArgs args)
{
DO();
}
private void DO()
{
// Some process takes an hour
}
服务启动后,它会在“正在启动”中停留一个小时
有没有一种方法可以在服务启动后立即启动我的服务 DO() 函数,而不是从 OnStart 事件开始?
假设您的示例没有遗漏任何内容,您的计时器已用方法将 运行 ThreadPool
。
所以我会在 OnStart
中更改这一行
DO();
...这一行:
ThreadPool.QueueUserWorkItem(x => Do());
它与计时器立即触发的效果相同,更重要的是,不会阻塞该行。
我在 VS.net C#
上创建了一个 windows 服务在 OnStart 事件中我启动了一个计时器。
在计时器中,我调用了一个名为 DO()
的函数DO()函数的过程很长(需要一个多小时)
流程应该是这样的
开始然后立即调用时间但由于定时器间隔需要再等一天
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart.");
try
{
Timer timer = new Timer();
timer.Interval = 1000 * 60 *60 * 24;
timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
timer.Start();
DO();
}
catch (Exception ex)
{
eventLog1.WriteEntry("ERROR (OnStart) : " + ex.ToString());
}
}
public void OnTimer(object sender, ElapsedEventArgs args)
{
DO();
}
private void DO()
{
// Some process takes an hour
}
服务启动后,它会在“正在启动”中停留一个小时
有没有一种方法可以在服务启动后立即启动我的服务 DO() 函数,而不是从 OnStart 事件开始?
假设您的示例没有遗漏任何内容,您的计时器已用方法将 运行 ThreadPool
。
所以我会在 OnStart
DO();
...这一行:
ThreadPool.QueueUserWorkItem(x => Do());
它与计时器立即触发的效果相同,更重要的是,不会阻塞该行。