Можно ли использовать BeginInvoke с multicastDelegate?

Я хочу поднять ряд событий из моего библиотечного класса,но я беспокоюсь, что некоторые подписчики событий будут грубыми и потратят много времени на обработку некоторых событий, тем самым блокируя поток, который поднимает события. Я подумал, что смогу защитить поток поднятия, используя поток пула потоков для поднятия каждого события:

if (packet != null && DataPacketReceived != null)
{
    var args = new DataPacketEventArgs(packet);
    DataPacketReceived.BeginInvoke(this, args, null, null);
}

Это отлично работает, когда есть только один подписчик события, но как только приходит второй подписчик, DataPacketReceived становится делегатом многоадресной рассылки, и я получаю исключение аргумента с сообщением об ошибке «Делегат должен иметь только один целевой объект». Есть ли простой способ поднять событие в отдельной теме, или мне нужно запустить тему, а затем поднять событие оттуда?

10
задан Dmitrii Lobanov 23 December 2011 в 05:41
поделиться