Я хочу передать событие в метод. Код, который у меня есть, выглядит следующим образом, но что я ставил для типа «XXX»?Передача события в качестве аргумента в метод
internal class Retriever<TEventArgs> where TEventArgs : EventArgs
{
public Retriever(XXX event, EventHandler<TEventArgs> handler)
{
_event = event;
_handler = handler;
_event += handler;
}
XXX _event;
EventHandler<TEventArgs> _handler;
}
Редактировать: Разработка вопроса. Я пытаюсь написать генератор событий, где событие подписано до возникновения события и после того, как событие произошло. Этот класс будет выглядеть так:
internal class EventGuard<TEventArgs> : IDisposable where TEventArgs : EventArgs
{
public Retriever(XXX event, EventHandler<TEventArgs> handler)
{
_event = event;
_handler = handler;
_event += handler;
}
XXX _event;
EventHandler<TEventArgs> _handler;
public void Dispose()
{
_event -= _handler;
}
}
, и я буду использовать его следующим образом. Proxy.RetrieveAsync
- это веб-метод, который после завершения вызовет событие Proxy.RetrieveCompleted
. Тело обработчика завершения HandleRetrieveCompleted
, который не показан, вызовет Set() в ManualResetEvent (передан как объект UserState).
using (new EventGuard<EventArgs>(Proxy.RetrieveCompleted, new EventHandler<EventArgs>(HandleRetrieveCompleted)))
{
ManualResetEvent resetEvent = new ManualResetEvent();
Proxy.RetrieveAsync(resetEvent);
resetEvent.WaitOne();
}
Я отредактировал вопрос, чтобы дать больше контекста тому, чего я пытаюсь достичь. –
ugh, это связано с тем, что несколько классов не могут публиковать одно и то же событие, а также события с использованием сильных ссылок * (причина № 1 для утечек памяти в программах на C#) *, плюс ** невероятно ** излишне подробные синтаксис, который они используют * (нужно вручную проверить нули при каждом вызове? Действительно!?) * ... Я думаю, что события нуждаются в полной доработке для C# 5.0 –
@ BlueRaja-DannyPflughoeft Я думаю, что то же самое касается кода многословным, и есть больше проблем и ограничений в .NET-событии. Чтобы решить эту проблему или, по крайней мере, иметь хорошую альтернативу, я пишу код, который может быть полезен, пожалуйста, просмотрите эту статью: http://www.codeproject.com/Articles/864690/Simplifying-Events-in-NET для получения дополнительной информации , –