C# 删除内联静态事件
我在一个静态方法中临时附加了一个静态事件,因为我不希望它挂在内存中,或者如果我调用它两次,就会触发两个事件处理程序 对于这些是否应该是静态的,我几乎没有发言权,我更愿意不承担讨论/重构的责任 起初我是这样做的C# 删除内联静态事件,c#,events,static,inline,C#,Events,Static,Inline,我在一个静态方法中临时附加了一个静态事件,因为我不希望它挂在内存中,或者如果我调用它两次,就会触发两个事件处理程序 对于这些是否应该是静态的,我几乎没有发言权,我更愿意不承担讨论/重构的责任 起初我是这样做的 public static void DoSomething() { try { MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe)
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
}
}
publicstaticvoiddosomething()
{
尝试
{
MyStaticClass.MyEvent+=新事件处理程序(MyStaticClass_HandleMe);
…//做事
}
最后
{
MyStaticClass.MyEvent-=新事件处理程序(MyStaticClass_HandleMe);//从事件中分离
}
}
这一直运行良好,但我希望以内联方式处理事件,以与方法中的另一个事件保持一致,并设置一个函数本地的、由另一个事件使用的cancel boolean
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
{
//???
}
}
publicstaticvoiddosomething()
{
尝试
{
bool cancel=false;
MyStaticClass.MyEvent+=新事件处理程序(委托(对象发送方,HandleEventArgs e)
{
取消=真;
})
…//执行依赖于取消的操作=false;
}
最后
{
//???
}
}
我的问题是,在场景2中,如何清理静态事件并与之分离?请参见
基本上,只需将内联方法存储在一个委托中,并在最后阶段取消订阅即可。您可以尝试以下方法:
public static void DoSomething()
{
bool cancel = false;
EventHandler<EventArgs> handler = delegate { cancel = true; };
try
{
MyStaticClass.MyEvent += handler;
}
finally
{
MyStaticClass.MyEvent -= handler;
}
}
publicstaticvoiddosomething()
{
bool cancel=false;
EventHandler=delegate{cancel=true;};
尝试
{
MyStaticClass.MyEvent+=处理程序;
}
最后
{
MyStaticClass.MyEvent-=处理程序;
}
}
干杯,现在我看到了,这似乎很明显:)