2015-05-03 222 views
0

我有以下代碼與3個不同的類。我正在嘗試 從類B訂閱事件到 類ControlSystem中定義的方法(事件處理程序)。所有編譯好,它沒有問題,但事件處理程序方法從來沒有觸發......我做錯了什麼?C#訂閱事件

namespace EventTest 
{ 
    public class ControlSystem : CrestronControlSystem 
    { 
     A myObject = new A(); 

     public ControlSystem(): base() 
     { 
      Thread.MaxNumberOfUserThreads = 100; 

      // Subscribe Event 
      myObject.mySubObject.BEvent += HandleBEvent; 

      // Throw Event 
      myObject.mySubObject.ThrowEvent(); 

     } 
     public override void InitializeSystem() 
     { 

     } 

     public void HandleBEvent(object sender, EventArgs args) 
     { 
      Console.WriteLine("Something happend to {0}", sender); 
     } 
    } 

    public class A 
    { 
     public B mySubObject; 

     public A() 
     { 
      mySubObject = new B(); 
     } 
    } 

    public class B 
    { 
     public EventHandler BEvent; 

     public B(){} 

     public void ThrowEvent() 
     { 
      EventHandler handler = BEvent; 
      if (handler != null) 
      { 
       handler(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

下面的實際代碼鏈接(它適用於嵌入式系統,所以你將無法編譯它)。想法是按下按鈕觸發一個事件,可能會發生其他UI發生的事件。

http://ideone.com/NJz2Ek

感謝

+0

你想要什麼時候觸發事件? –

+1

代碼適用於我。 [檢查你自己](http://ideone.com/1eEhfF)。你需要提供一個代碼來重現你正在談論的問題。 –

+0

那麼,那麼沒有問題? –

回答

2

你缺少事件關鍵字。

public event EventHandler BEvent; 

是什麼需要在那裏。

+1

但這不是問題。 OP的代碼工作。沒有事件關鍵字,事件被視爲委託,這很好。 –

+0

是的,這很好,但不是核心問題。 「BEvent」現在是一個公共領域。 –

+0

這沒有幫助。仍然無法運行事件處理程序方法... –