删除内联静态事件

时间:2009-03-17 01:14:45

标签: c# events static inline

我在静态方法中有一个静态事件,我暂时将其附加到,因为我不希望它在内存中挂起,或者在我调用两次事件处理程序的情况下触发它。

我几乎没有说这些是否应该是静态的,并且不愿意讨论/重构责任。

最初我是这样做的

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中,我如何清理和分离静态事件?

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.

基本上,只需将您的内联方法存储在委托中,并在最终期间取消订阅。