只是想知道我的代码放在哪里,以便在我的服务启动后执行。
目前我的代码是这样的
namespace sendMailService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.sendMail();
}
protected override void OnStop()
{
}
private void sendMail()
{
// My actual service code
}
}
}
当我启动服务时,它将无法进入“运行”模式,直到this.sendMail()
完成。顺便说一句,sendMail()
函数的最后一行是stop()
服务。因此,服务在执行OnStart
方法时崩溃。
我知道为什么会这样发生(因为代码在OnStart
中)。问题是在哪里调用sendMail()
以便服务进入运行模式然后执行该函数。
答案 0 :(得分:1)
您可以修饰代码以解决问题。
namespace sendMailService
{
public partial class Service1 : ServiceBase
{
private System.Threading.Timer IntervalTimer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
TimeSpan tsInterval = new TimeSpan(0, 0, Properties.Settings.Default.PollingFreqInSec);
IntervalTimer = new System.Threading.Timer(
new System.Threading.TimerCallback(IntervalTimer_Elapsed)
, null, tsInterval, tsInterval);
}
protected override void OnStop()
{
IntervalTimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
IntervalTimer.Dispose();
IntervalTimer = null;
}
private void IntervalTimer_Elapsed(object state)
{
// Do the thing that needs doing every few minutes...
sendMail();
}
}
}