2012-12-06 70 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分鐘發送一次郵件。如果服務使用大量資源,則有必要對其進行優化。 –

相關問題