注册/取消注册事件处理程序的一般方法
问题描述:
我试图找出一种方法,使我的事件注册和取消注册同步从我的初始化和清理。 我想要的是能够调用通用方法来注册或取消注册一个事件,并只传递一个布尔值来进行操作。注册/取消注册事件处理程序的一般方法
我不想使用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)
{
}
}
答
我遇到了类似的清理方法问题。我通过在处理窗口或控件时保留一系列要执行的操作来解决此问题。
事情是这样的:
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();
}
它是WPF吗? 'RegisterEvent'方法是怎么样的? –