2012-04-08 2 views
0

あまりにも単純な質問については申し訳ありませんが、これを実装する方法はわかりません。一定の時間内に特定のメソッドが呼び出されなかった場合は、イベントを発生させる必要があります(このイベントを受け取ったとき、私は問題を解決しようとします。これは接続問題の一種で、解決するために通知する必要があります。接続方法を変更します。)最後の5秒間にメソッドが呼び出されなかった場合、イベントを発生させる方法は?

public void MethodThatShouldBeCalledFrequently // acutally datagram from UDP received 
{ 
    // if not called for 5 seconds than raise event 
} 
public event EventHandler</*no parameters*/> MethodNotCalledForFiveSeconds; // connection problem, switch from UDP to TCP 
+0

この方法で新しいタイマーを設定できませんか? – anuragsn7

+0

@ anuragsn7私はこの方法の中で何かをすることができます – javapowered

+0

@ anuragsn7私はストップウォッチのようなものが必要ですが、逆の場合は5秒からカウントダウンする必要があり、0秒になるとイベントが発生します。各メソッド呼び出しで私は "5秒"にストップウォッチをリセットする必要があります – javapowered

答えて

0

これはどうですか?

public class Program 
{ 
    private Timer timer; 

    public Program() 
    { 
     InitializeTimer(); 
     StartTimerFromBeginning(); 
    } 

    public void MethodThatShouldBeCalledFrequently() 
    { 
     StartTimerFromBeginning(); 
    } 

    public event EventHandler MethodNotCalledForFiveSeconds; 

    private void InitializeTimer() 
    { 
     timer = new Timer(5000); 
     timer.Elapsed += HandleTimerElapsed; 
    } 

    private void StartTimerFromBeginning() 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 

    private void HandleTimerElapsed(object sender, ElapsedEventArgs e) 
    { 
     MethodNotCalledForFiveSeconds(this, EventArgs.Empty); 
    } 
} 
+0

私は毎回 '新しい'タイマーを作成する義務ですか?私はタイマーを再利用できますか?メソッドが数千回/秒と呼ばれるためです。 – javapowered

+0

@javapoweredあなたはいません - 「タイマー」が一度作成されてから再開するように私の答えを編集しました。最初は 'Timer'を再起動できないと思っていましたが、速いサンプルがそれ以外の場合は証明されました:) –

+0

ありがとう!誰かがもっと美しい何かを提案することができない限り、答えを正しいものとしてマーキングする:) – javapowered

0

たぶん、あなたはフラグを使用してMethodThatShouldBeCalledFrequentlyが呼び出されたときにこれをtrueに設定することができます。

 bool wasCalled = false; 
    public void MethodThatShouldBeCalledFrequently // acutally datagram from UDP received 
    { 
     wasCalled = true; 
     } 

フラグが真か偽である場合には、各5秒でチェックする別の方法を使用し、それが偽のだならば、イベントを発生させます。

+0

私はそれがどのように動作するはずです理解していない – javapowered

関連する問題