我的代码放在哪里,以便在我的服务启动后执行?

时间:2015-10-24 11:13:25

标签: c# windows-services

只是想知道我的代码放在哪里,以便在我的服务启动后执行。

目前我的代码是这样的

    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()以便服务进入运行模式然后执行该函数。

1 个答案:

答案 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();
        }
    }
}