2010-10-26 81 views
1

我正在處理一些事件驅動的代碼。在我的系統的一個組件中,有時會出現一個事件,我目前沒有處理程序。有沒有辦法讓事件「等待」,直到有一個處理程序可用?C#正在等待事件

感謝,

PM

+0

您是否還需要執行該事件?或者稍後分配給處理程序?如果它稍後分配了處理程序,爲什麼不在通話之前分配處理程序? – Entity 2010-10-26 02:06:46

+0

對不起,讓我重新解釋一下:事件E發生了。我只有一個C類可以處理E,但是此時沒有這個類的活動實例,所以當E被提出時,它看不到任何訂戶,並且什麼也沒有發生。有一種方法可以在創建C實例後立即處理E? – user472875 2010-10-26 02:12:49

回答

3

有在C#中沒有內置的機制來排隊事件,並派遣他們作爲處理器連接。當一些有趣的活動發生時,事件會同步發生......「等待」處理程序將需要該進程阻止。

您可以通過在班級中提供custom implementation of the event member來實現自己的事件排隊。您需要一個單獨的數據結構來緩存先前「引發」事件的相關信息,並將它們排隊等候處理程序附加。

與上述方案中的麻煩,是,雖然有可能是極不尋常的和有點混亂。大多數開發人員不希望以這種方式提出事件。事實也很複雜,如果大量事件發生時沒有附加的處理程序,則最終可能會使用大量內存來存儲永遠不會分派的事件。就個人而言,我通常會建議避免這樣的設計。