Асинхронные многоадресные делегаты - PullRequest
14 голосов
/ 21 сентября 2009

В последнее время я работаю над проектом, который широко использует события. Одна из вещей, которые мне нужно сделать, - это асинхронный вызов нескольких обработчиков событий в многоадресном делегате. Я думал, что хитрость заключается в том, чтобы вызывать BeginInvoke для каждого элемента из GetInvocationList, но кажется, что BeginInvoke там не существует.

Есть ли способ сделать это или мне нужно начать использовать ThreadPool.QueueUserWorkItem и как-то прокрутить свое собственное решение?

1 Ответ

20 голосов
/ 21 сентября 2009

GetInvocationList просто возвращает массив типа Delegate, который не знает соответствующей подписи. Однако вы можете привести каждое возвращаемое значение к определенному типу делегата:

foreach (MyDelegate action in multicast.GetInvocationList())
{
    action.BeginInvoke(...);
}
...