2009-01-28 46 views
5

我更新一些舊的託管C++代碼行是這樣的:什麼是訂閱事件的C++/CLI語法?

instanceOfEventSource->add_OnMyEvent( 
    new EventSource::MyEventHandlerDelegate(this, MyEventHandlerMethod)); 

其中

  • 的EventSource是將事件發佈
  • instanceOfEventSource就是一個很好的實例
  • EventSource :: MyEventHandlerDelegate是用於事件
  • MyEventHandlerMethod委託類型是當前類中的一個(非靜態)方法(其中「這」是一個實例)與所述簽名匹配的EventSource :: MyEventHandlerDelegate

C++/CLI中的正確語法是什麼?

回答

6

語法是類似於C#的,換句話說,+=過載使這成爲可能:

instanceOfEventSource.MyEvent += 
    gcnew EventSource::MyEventHandlerDelegate(this, &MyClass::MyEventHandlerMethod); 

類似於用於除去。但是,與C#不同的是,您可能不會省略事件處理程序委託的顯式實例,因此這會產生相當長的代碼。

+0

,我不得不使用gcnew,我也發現,我不得不寫 「@MyClass :: MyEventHandlerMethod」,而不僅僅是 「MyEventHandlerMethod」。但是,這讓我需要去的地方 - 謝謝! – Eric 2009-01-28 23:12:54

1

我剛剛花了半個小時試圖找出如何註冊一個靜態方法作爲事件的回調方法。雖然OP沒有特別要求註冊靜態方法,但這對面臨同樣問題的其他人有幫助。實際上它非常簡單,在這種情況下,委託構造函數僅爲靜態目標方法提供一個參數。

例子:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);