Frage

Ich habe ein statisches Ereignis in einer statischen Methode, die ich vorübergehend bin Befestigung, wie ich es in Erinnerung hängen, um nicht will, oder in einer Situation, wo ich zwei Event-Handler am Brennen, wenn ich es zweimal aufrufe.

Ich habe wenig zu sagen, ob diese in statisch sein sollen oder nicht, und würde es vorziehen, nicht die Diskussion / refactor Verantwortung haben.

Am Anfang war ich es so tun

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
    }
}

Das ist gut funktioniert, aber ich mag die Veranstaltung inline zu handhaben, mit einem anderen Ereignisse in dem Verfahren konsequent zu sein, sowie die Einstellung ein boolean abzubrechen, die die Funktion lokal ist und durch das andere Ereignis verwendet wird.

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
    {
        //???
    }
}

Meine Frage ist, in Szenario 2, wie kann ich aufzuräumen und aus dem statischen Fall lösen?

War es hilfreich?

Lösung

Sie könnte so etwas wie diese versuchen:

public static void DoSomething()
{
    bool cancel = false;
    EventHandler<EventArgs> handler = delegate { cancel = true; };

    try
    {
        MyStaticClass.MyEvent += handler;
    }
    finally
    {
        MyStaticClass.MyEvent -= handler;
    }
}

Andere Tipps

Siehe dieses Thema für einen großen Ansatz.

Im Grunde nur speichern Sie Ihre inlined Methode in einem Delegierten und abmelden es während Ihrer schließlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top