C # прикрепить обработку событий с дополнительными параметрами - PullRequest
1 голос
/ 05 января 2011

ПРЕДИСЛОВИЕ

У меня есть кнопка формы Windows, которая выставляет событие OnClick (отправитель объекта, EventArgs e). В моем приложении я могу справиться с этим, используя классическую технику обработки событий C #:

// Button Creation
Button button = new Button();
button.Click += MyEventHandler;

Затем Windows Form запрашивает обработчик со следующей подписью:

public void MyEventHandler(object sender, EventArgs e) { }

Предположим, что я хотел бы использовать лямбда-выражение, чтобы сделать это, я могу использовать синтаксис:

button.Click += (sender, args) =>
{
  // execute the code
};

Недостатком этого является то, что я не могу отписаться от лямбда-выражения.

ВОПРОС

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

button.Click += MyUtility.Click(() 
    => {
        // the custom code the Click event will execute
    })

Могу ли я сделать это как-нибудь?

1 Ответ

4 голосов
/ 05 января 2011

Вы можете назначить лямбда-выражение для локальной переменной или поля.

Например:

EventHandler handler = (sender, args) =>
{
  // execute the code
};

button.Click += handler;
button.Click -= handler;

Если вы хотите отписаться внутри обработчика, вам нужно назначить *От 1006 * до null, затем к лямбде, чтобы избежать определенных проблем с назначением.

...