2013-07-03 97 views
0

我正在做一個應用程序來記錄用戶的不活動,並且遇到了一些自定義事件的問題,沒有拋出異常並且沒有編譯器錯誤出現,但是當我運行我的應用程序時,沒有任何東西寫入控制檯,這讓我想到事件根本不是射擊!如果它突然出現,我已經告訴該活動顯示一條消息,但沒有任何反應,我相信這證實了我的懷疑。爲什麼不是我的自定義事件觸發?

我不是在C#或自定義事件的專家,所以任何和所有幫助將不勝感激=]

我爲我的自定義事件的代碼如下;

   Inactivity inact = new Inactivity(); 
      inact.Active += inactivity_Active; 
      inact.Inactive += inactivity_Inactive; 

    public void inactivity_Inactive(object sender, EventArgs e) 
      { 

      var logdata1=Inactivity.GetIdleTime(); 
      System.Diagnostics.Debug.WriteLine(logdata1); 
      MessageBox.Show("Inactive"); 
     } 

     public void inactivity_Active(object sender, EventArgs e) 
     { 

      var logdata2 = Inactivity.GetIdleTime(); 
      System.Diagnostics.Debug.WriteLine(logdata2); 
      MessageBox.Show("Active"); 
     } 

這些都是要去的方法,以提高有效和無效事件

public void OnInactive(EventArgs e) 
    { 
     EventHandler inactiveEvent = this.Inactive; 
     if(inactiveEvent!=null) 
     { 
      inactiveEvent(this, e); 
     } 
    } 


    public void OnActive(EventArgs e) 
    { 

     EventHandler inactiveEvent = this.Inactive; 
     if (inactiveEvent != null) 
     { 
      inactiveEvent(this, e); 
     } 
     } 
+0

看來OnActive(EventArgs e)方法是從OnInactive(EventArgs e)方法複製粘貼的。你真的想要兩種相同的方法,還是一個錯字? –

回答

5
Inactivity inact = new Inactivity(); 

這不是你如何定義一個事件被調用。你定義一個事件是這樣的:

public event EventHandler<EventArgs> Active; 
public event EventHandler<EventArgs> Inactive; 

你的寫作/提高這些事件調用這些方法:

protected virtual void OnActive(EventArgs e) 
{ 
    EventHandler<EventArgs> active = Active; 
    if (active != null) 
    { 
     active(this, e); 
    } 
} 

protected virtual void OnInactive(EventArgs e) 
{ 
    EventHandler<EventArgs> inactive = Inactive; 
    if (inactive != null) 
    { 
     inactive(this, e); 
    } 
} 

你的事件處理方法是正確的。作爲參考,我在這裏重複他們:

public void inactivity_Inactive(object sender, EventArgs e) 
{ 
    var logdata1=Inactivity.GetIdleTime(); 
    System.Diagnostics.Debug.WriteLine(logdata1); 
    MessageBox.Show("Inactive"); 
} 

public void inactivity_Active(object sender, EventArgs e) 
{ 
    var logdata2 = Inactivity.GetIdleTime(); 
    System.Diagnostics.Debug.WriteLine(logdata2); 
    MessageBox.Show("Active"); 
} 

你會註冊那些當相應的事件與此代碼,你可以放置成類的構造函數,例如提高到被調用。

Active += inactivity_Active; 
Inactive += inactivity_Inactive; 
+1

我正要寫這個!他錯過了受保護的虛擬虛空方法。好答案。這裏是微軟的例子:http://msdn.microsoft.com/en-us/library/9aackb16.aspx – Andres

+0

我該如何處理事件? =]謝謝你的好答案btw! –

+0

我編輯了我的答案,使其更清晰。基本上,你的事件處理程序方法已經很好了,只需要正確註冊,以便在事件發生時調用它們。 –

相關問題