注册/取消注册事件处理程序的一般方法

问题描述:

我试图找出一种方法,使我的事件注册和取消注册同步从我的初始化和清理。 我想要的是能够调用通用方法来注册或取消注册一个事件,并只传递一个布尔值来进行操作。注册/取消注册事件处理程序的一般方法

我不想使用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'方法是怎么样的? –

我遇到了类似的清理方法问题。我通过在处理窗口或控件时保留一系列要执行的操作来解决此问题。

事情是这样的:

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

RegisterEvent执行(在我的情况下延迟)的事件附件:

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

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

    unregisterEvents.Add(unregisterAction); 
} 

在处置,只是走在注销事件:

foreach (Action a in unregisterEvents) 
{ 
    a.Invoke(); 
}