2017-06-06 24 views
1

イベント登録と登録解除を初期化とクリーンアップから同期させる方法を見つけようとします。 私が欲しいのは、イベントを登録または登録解除する汎用メソッドを呼び出すことができ、操作を行うためにブール値を渡すことだけです。イベントハンドラを登録/登録解除する一般的な方法

私はWindowでは使いたくありませんが、簡単なサンプルでした。

class EventSample 
{ 
    private Window myWindow; 

    public EventSample(Window window) 
    { 
     myWindow = window; 
     InitEvent(true); 
    } 

    ~EventSample() 
    { 
     InitEvent(false); 
    } 

    private void InitEvent(bool register) 
    { 
     // I want a generic similar to that 
     RegisterEvent(register, myWindow.Activated, MyWindow_Activated); 
     RegisterEvent(register,myWindow.Closed , MyWindow_Closed); 
     RegisterEvent(register, myWindow.Closing ,MyWindow_Closing); 
    } 



    private void MyWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 

    } 

    private void MyWindow_Closed(object sender, EventArgs e) 
    { 
    } 

    private void MyWindow_Activated(object sender, EventArgs e) 
    { 

    } 
} 
+0

WPFですか? 'RegisterEvent'メソッドはどのように見えますか? –

答えて

0

私はクリーンアップメソッドで同様の問題に直面しています。私はウィンドウやコントロールを破棄するときに実行するアクションのリストを保持することでこれを解決しました。このような

何か:

this.RegisterEvent 
    (() => this.Event += handler 
    ,() => this.Event -= handler 
    ); 

RegisterEvent実行(私の場合は遅れた)イベントの添付ファイル:

foreach (Action a in unregisterEvents) 
{ 
    a.Invoke(); 
} 
:廃棄上

private List<Action> unregisterEvents = new List<Action>(); 

private void RegisterEvent(Action registerAction, Action unregisterAction) 
{ 
    registerAction.Invoke(); 

    unregisterEvents.Add(unregisterAction); 
} 

、ちょうど登録解除イベント上を歩きます

関連する問題