вопрос про делегаты
От: Divineshadow  
Дата: 29.06.10 07:34
Оценка:
Здравствуйте.
Есть статический метод:
System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback);

WaitCallback — это делегат объявленный вот таким образом:
[ComVisibleAttribute(true)] 
public delegate void WaitCallback (Object state)

Параметром в этот метод можно передать анонимный делегат:
System.Threading.ThreadPool.QueueUserWorkItem(delegate(object obj) { /*do something*/});

А почему тогда нельзя передать в Control.Invoke анонимный делегат?
Control.Invoke(delegate { /*do something*/ });

Выдаётся ошибка:

Argument '1': cannot convert from 'anonymous method' to 'System.Delegate'

А вот так работает:
Control.Invoke(new MethodInvoker(delegate { /*do something*/ }));
Re: вопрос про делегаты
От: nikov США http://www.linkedin.com/in/nikov
Дата: 29.06.10 07:39
Оценка:
Здравствуйте, Divineshadow, Вы писали:

D>А почему тогда нельзя передать в Control.Invoke анонимный делегат?

D>
D>Control.Invoke(delegate { /*do something*/ });
D>


Потому что в сигнатуре метода Control.Invoke тип параметра не является делегатом (класс System.Delegate не является делегатом, это базовый класс для делегатов).
Re: вопрос про делегаты
От: TK Лес кывт.рф
Дата: 29.06.10 07:42
Оценка:
Здравствуйте, Divineshadow, Вы писали:

D>А почему тогда нельзя передать в Control.Invoke анонимный делегат?

D>Выдаётся ошибка:
D>Argument '1': cannot convert from 'anonymous method' to 'System.Delegate'

System.Delegate "напрямую" не используется. А решить самостоятельно к какому типы привести выражение delegate { } (как в случае с QueueUserWorkItem) компилятор не может
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.