我想將事件傳遞給方法。我的代碼如下,但是我爲「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
是一種網絡方法,完成後將導致發起事件。完成處理程序HandleRetrieveCompleted
的主體(未顯示)將調用ManualResetEvent(作爲UserState對象傳入)的Set()。
using (new EventGuard<EventArgs>(Proxy.RetrieveCompleted, new EventHandler<EventArgs>(HandleRetrieveCompleted)))
{
ManualResetEvent resetEvent = new ManualResetEvent();
Proxy.RetrieveAsync(resetEvent);
resetEvent.WaitOne();
}
我已經編輯了這個問題,以提供更多關於我想要實現的內容的內容。 – 2010-02-12 04:15:06
呃,這與多個類無法發佈相同事件以及使用強引用*(C#程序中內存泄漏的第一個原因)*以及令人難以置信的**不必要冗長的事件他們使用的語法*(必須手動檢查每個調用中的空值?真的!?)* ...我認爲事件需要C#5.0的完整返工 – 2012-08-08 18:22:48
@ BlueRaja-DannyPflughoeft我認爲代碼冗長的情況也是如此,有關.NET事件的更多問題和限制。爲了解決這個問題,或者至少有一個很好的選擇,我寫了一些可用的代碼,請查閱這篇文章:http://www.codeproject.com/Articles/864690/Simplifying-Events-in-NET以獲取更多信息。 – 2015-01-30 07:58:59