Я использую API на основе событий и хочу, чтобы определенный метод обработки событий вызывался только один раз. (Обратите внимание, что у меня есть другой метод, который всегда обрабатывает событие, но я хочу добавить другой обработчик для определенных ситуаций и сделать его только один раз.)
Возможно ли / рекомендуется ли отписаться от события внутри обработчика события? Э.Г.
private void OnEventRaised(object sender, EventArgs e) {
_eventRaisingObject.EventRaised -= OnEventRaised;
... // Do normal code
}
Какого рода проблемы с многопоточностью следует учитывать при таком подходе?
Во-вторых, можно ли вызывать обработчик событий только один раз, когда он является анонимным методом? Э.Г.
_eventRaisingObject.EventRaised += (sender, e) => {
// Unsubscribe?
... // Do normal code
}
В настоящее время я использую анонимный метод и просто проверяю логическое значение, но я думаю, что было бы лучше (с меньшими накладными расходами и потенциальными ошибками) отписаться, когда работа завершена - возможно, это предположение неверно. Одна проблема, которую я предвижу при проверке логического значения, заключается в том, что, если ситуация требует повторения (чтобы снова был добавлен анонимный обработчик событий), общий логический аргумент мог бы разрешать вызов анонимных методов несколько раз в разных потоках.