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-=处理程序;
}
}

干杯,现在我看到了,这似乎很明显:)