2012-04-08 46 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 2012-04-08 07:29:55

+0

@ anuragsn7我可以在這個方法中做任何事 – javapowered 2012-04-08 07:33:44

+0

@ anuragsn7我需要類似秒錶,但「反之亦然」它應該倒計時,從5秒開始,並且在0秒時它應該引發一個事件。每次調用方法時,我應該將秒錶重置爲「5秒」 – javapowered 2012-04-08 07:34:59

回答

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

我每次都有義務創建'新'計時器?我可以重用Timer嗎?因爲方法被稱爲每秒數千次... – javapowered 2012-04-08 07:40:27

+0

@javapowered你不是 - 我編輯了我的答案,以便「定時器」只創建一次,然後重新啓動。起初我以爲'Timer'不能重新啓動,但是快速的示例證明不然:) – 2012-04-08 07:47:36

+0

謝謝!標記答案是正確的,除非有人能夠建議更美麗的東西:) – javapowered 2012-04-08 07:55:20

0

也許你可以使用一個標誌,並將其設置爲true時MethodThatShouldBeCalledFrequently被調用。

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

使用另一種方法檢查每5秒如果標誌是真或假,如果它是假然後引發事件。

+0

我不明白應該如何工作 – javapowered 2012-04-08 07:33:25

相關問題