2012-12-06 69 views
3

我正在开发一个Windows服务,每15分钟发送一次自动电子邮件。我使用定时器在固定的时间间隔(15分钟)后再次使用该服务,但它不起作用。固定时间间隔后重新启动Windows服务

namespace Mailer 
{ 
    public partial class Mailer : ServiceBase 
    { 
    System.Timers.Timer createOrderTimer; 
    public Mailer() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     sendmail(); //function to send email. 

     createOrderTimer = new System.Timers.Timer();      
     createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(createOrderTimer_Elapsed); 
     createOrderTimer.Interval = 15000; 
     createOrderTimer.Enabled = true; 
     createOrderTimer.AutoReset = true;      
     createOrderTimer.Start(); 
    } 

    protected void createOrderTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs args) 
    { 
     createOrderTimer.Stop(); 
     ServiceController controller = new ServiceController("Mailer"); 
     controller.Start(); 
    } 

    protected void sendmail 
    { 
     //code to send email. 
    } 

    protected override void OnStop() { } 
    } 
} 

最初邮件已发送,但我希望每15分钟发送一次邮件。

+1

您的间隔的代码应该是900000(MS)15分钟。 –

+1

@AlexFilipovici是对的,这可能有所帮助: var myTimer = =新的计时器(15 * 60 * 1000); //设置15分钟 –

+0

您是否考虑使用预定任务而不是服务? –

回答

2

你需要改变这样的

namespace Mailer 
{ 
    public partial class Mailer : ServiceBase 
    { 
    System.Timers.Timer createOrderTimer; 
    public Mailer() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     createOrderTimer = new System.Timers.Timer();      
     createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(sendmail); 
     createOrderTimer.Interval = 900000; // 15 min 
     createOrderTimer.Enabled = true; 
     createOrderTimer.AutoReset = true;      
     createOrderTimer.Start(); 
    } 

    protected void sendmail(object sender, System.Timers.ElapsedEventArgs args) 
    { 
     //code to send email. 
    } 

    protected override void OnStop() { } 
    } 
} 
+0

非常感谢Aram The Code works perfect。 –

+0

但是使用上面的代码,服务连续运行,对不对? **如果我想在发送邮件15分钟后停止服务,并且一旦经过了15分钟的时间,我想重新启动服务并发送邮件。**(服务的连续运行会导致资源浪费,我怀疑。)请回复。 谢谢。 –

+0

该服务正在连续运行并每15分钟发送一次邮件。如果服务使用大量资源,则有必要对其进行优化。 –

相关问题