2017-04-05 9 views
0

私はWindowsサービスを作成しています。 30秒ごとにサービスを実行したい。C#タイマーは一度に1つのインスタンスが経過した

Windowsサービスのタイマーは、次のコードを使用して開始しました。

protected override void OnStart(string[] args) 
     { 
      timer1 = new Timer(); 
      timer1.Interval = 30000; 
      timer1.Elapsed += new ElapsedEventHandler(timer1_tick); 
      timer1.Start(); 
     } 

timer1_tick関数では、ユーザーの詳細の更新、ファイルのアップロードやダウンロードなどの操作を実行しています。

しかし、ここでは、上記の操作が30秒以内に完了するかどうかはわかりません。 私は一度に1つずつ実行したいです。

ここではtimer1_tick機能は30秒ごとに正確に呼び出されます。これは、timer1_tick関数がすべてのタスクを終了した場合にのみ発生します。

どうすればよいですか?

+0

タイマーのティックイベントで、タイマーを停止し、ロジックを実行して、最後にタイマーを再び開始します。 – Hakunamatata

答えて

2

あなたはタイマーを停止し、Timer.Stop();Timer.Start()を使用して終了するファイルのアップロードとダウンロードを待つ必要があります。

void timer1_tick(...){ 
    timer1.Stop(); 
    //Do your download, upload, etc. 
    timer1.Start(); 
} 

はそれが役に立てば幸い!

+0

問題ありません。がんばろう! :) – mindOfAi

+1

@JeevaJsb try..catch..finallyでtickアクションをラップし、finallyブロックでタイマーを再起動します。タイマーのイベントで何かが間違っていると、あなたのWindowsサービスが落ちて、次回にはリスクタイマーが実行されないようにします。 – Hakunamatata

+0

@ JeevaJsbは「素晴らしい提案です。私はいつも試してみる...私の方法でキャッチする。 – mindOfAi

0

要件に応じて、非同期プログラミングを使用してください。あなたを助けるかもしれない。ありがとうございます

timer1.Elapsed += new ElapsedEventHandler(await timer1_tick); 

async Task<void> timer1_tick() 
{ 
//Do your download, upload, etc. 
} 
関連する問題