2014-10-10 43 views
0

我有我的課,我定義我的事件:C# - 問題與自定義引發事件

public class EventRaiserUtility 
{ 
    public event EventHandler updateList; 

    public void updateListEvent() 
    { 
     if (updateList != null) 
     { 
      updateList(this, EventArgs.Empty); 
     } 
    } 
    public static EventRaiserUtility raiser = new EventRaiserUtility(); 
} 

,這是我養我的事件:

EventRaiserUtility.raiser.updateListEvent(); 

終於這是我」米試圖創建監聽器:

... 
EventRaiserUtility.raiser.updateList += new EventHandler(raiser_updateList); 
//placed in the init method of another class 
... 

private void raiser_updateList(object sender, EventArgs e) 
{ 
    connType = MainWindowViewModel.getTTC(); 
} 

簡單:這個事件有當列表更新通知,然後更新另一個列表,getTTC()raiser_updateList

但是raiser_updateList從不叫。爲什麼?我所有的3個代碼片段都在3個不同的類中(同一個項目),但這不是問題......對吧?

+0

您不應編輯您的問題以包含建議的解決方案,以便人們可以看到最初的問題和解決方案。 – 2014-10-10 10:00:08

回答

5

你正在創建一個新的EventRaiserUtility你打電話之前updateListEvent(其中應該有一個資本U遵循.NET約定,順便說一句,同上updateList =>UpdateList) - 但你要創建一個單獨的EventRaiserUtility以訂閱該活動。他們是不同的對象,所以有不同的事件訂閱者。如果您在舉辦活動之前始終創建新對象,則可能有從未是任何訂閱者。

你應該有一個EventRaiserUtility存儲在一個實例變量包含類 - 你會創建一個建築,然後訂閱事件在一個地方的另一種提高...但因爲他們」 d在談論相同的EventRaiserUtility對象時,你不會失去訂閱。

(不清楚這個工具類實際上有多大價值,說實話 - 你爲什麼不直接在你的類中聲明事件?爲什麼在EventHandler具有完全相同的簽名時聲明自己的委託?)

+0

我已經編輯了有關我的代理人的提示的代碼。但是,如果我在不同的課程中,我怎麼能參考同一個事件的實例呢?如何從另一個人看到實例? (對於愚蠢的問題抱歉,我是新來的事件管理) – 2014-10-10 09:32:27

+1

@PieroAlberto:你會堅持任何其他信息的相同方式。基本上我們對你想要做的事情瞭解不夠,說實話 - 但你需要一個對象來真正擁有這個事件。也許這是* EventRaiserUtility,但你仍然需要在兩個類中都提供相同的實例。不知道這些類之間的關係,很難提供幫助:( – 2014-10-10 09:37:36

+0

我已經完成了,謝謝你的建議。看,我已經重新編輯了代碼,現在它正在工作!:) – 2014-10-10 09:40:54

3

至於我可以看到 - 你訂閱的EventRaiserUtility一個實例的事件,但從沒有訂戶

+0

如果我在不同的類中,我該如何參考事件的相同實例?如何從另一個人看到實例? (對於愚蠢的問題抱歉,我是新來的管理事件) – 2014-10-10 09:32:54

+0

@PieroAlberto簡單地說 - 你可以將你的'updateList'事件移動到'第一個'類中,在其中提升它,'second'類處理事件應該從'first'類實例訂閱該事件。在這種情況下,你可能會發現你的'EventRaiserUtility'是多餘的。 – 2014-10-10 09:40:41

0

你需要一個對象真正擁有該事件的另一個實例籌款活動。也許這就是EventRaiserUtility,但是你仍然需要在兩個類中都提供相同的實例。不知道這些類別之間的關係