Отмена подписки на события в случае закрытия переменной - PullRequest
0 голосов
/ 04 ноября 2011

Я всегда стараюсь отписаться от событий, где это возможно и возможно. В случае, когда происходит закрытие переменной, я делаю следующее :

int someVar;

EventHandler moveCompleted = null;
moveCompleted = delegate(object sender, EventArgs e)
{
    //...
    //here is variable closure
    someVar = 5;
    //...
    moveStoryboard.Completed -= moveCompleted;
};

moveStoryboard.Completed += moveCompleted;

Но я не хочу использовать анонимный метод, и я думаю, что это не очень хороший способ. Пожалуйста, дайте мне несколько советов или примеров кода.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

что не так с:

class MyClass
{
    public event EventHandler MyEvent;

    public MyClass()
    {
        MyEvent += OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice;
    }

    protected void OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice(object sender, EventArgs e)
    {
        MyEvent -= OnSomeEventHandlerToMyLocalClassWhichOfcourseIsABadPractice;
    }
}
1 голос
/ 04 ноября 2011

Если вы не хотите использовать анонимную функцию, это намного проще:

moveStoryboard.Completed += HandleStoryboardCompleted;

...

private void HandleStoryboardCompleted(object sender, EventArgs e)
{
    // Do stuff...
    moveStoryboard.Completed -= HandleStoryboardCompleted;
}

Это будет фактически создавать новый экземпляр EventHandler каждый раз, когда вызывается метод, но потому что этот экземпляр будетбыть равным тому, который использовался для подписки (тот же метод с той же целью), который будет хорошо использовать для отмены подписки.

...