7
我想從我的圖書館類中引發一系列事件,但我擔心一些事件訂閱者會粗魯,需要很長時間來處理一些事件,從而阻塞引發事件的線程。我以爲我可以通過使用一個線程池中的線程來提高每個事件保護提高線:如果只有一個用戶到事件我可以在MulticastDelegate中使用BeginInvoke嗎?
if (packet != null && DataPacketReceived != null)
{
var args = new DataPacketEventArgs(packet);
DataPacketReceived.BeginInvoke(this, args, null, null);
}
這工作正常,但只要第二用戶到達時,DataPacketReceived
成爲多播委託,我得到一個參數異常與錯誤消息,「委託必須只有一個目標。」有沒有簡單的方法來在單獨的線程上提高事件,還是必須啓動一個線程,然後從那裏提出事件?
正確的,但要注意,調用`BeginInvoke`每個單獨的用戶並不一定意味着每次都會在一個單獨的線程上運行。這是線程池的業務。 – Ani 2011-12-23 05:46:54