我在静态方法中有一个静态事件,我暂时将其附加到,因为我不希望它在内存中挂起,或者在我调用两次事件处理程序的情况下触发它。
我几乎没有说这些是否应该是静态的,并且不愿意讨论/重构责任。
最初我是这样做的
public static void DoSomething()
{
try
{
MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe);
... //Doing Stuff
}
finally
{
MyStaticClass.MyEvent -=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe);//Detach from event
}
}
这个工作正常,但我想处理内联事件,与方法中的另一个事件保持一致,以及设置一个取消布尔值,该布尔值是函数的本地并由另一个事件使用。
public static void DoSomething()
{
try
{
bool cancel = false;
MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(delegate(object sender, HandledEventArgs e)
{
cancel = true;
})
... //Doing Stuff dependent on cancel = false;
}
finally
{
//???
}
}
我的问题是,在方案2中,我如何清理和分离静态事件?
答案 0 :(得分:4)
您可以尝试这样的事情:
public static void DoSomething()
{
bool cancel = false;
EventHandler<EventArgs> handler = delegate { cancel = true; };
try
{
MyStaticClass.MyEvent += handler;
}
finally
{
MyStaticClass.MyEvent -= handler;
}
}
答案 1 :(得分:1)
请参阅this thread for a great approach.
基本上,只需将您的内联方法存储在委托中,并在最终期间取消订阅。