Попробуйте это.
Длинная версия того, почему это необходимо. Вместо того, чтобы принимать конкретный тип делегата в качестве параметра, метод Invoke принимает тип System.Delegate. Этот тип не обеспечивает типизации для строго типизированной подписи. Это базовый класс делегатов, и вместо этого он предоставляет общий механизм для вызова всех делегатов.
К сожалению, при передаче имени метода в качестве источника делегата в C # оно должно быть передано конкретному типу делегата. В противном случае C # не знает, какой тип делегата создавать внутри и в отличие от VB, он не будет генерировать анонимные типы делегатов. Вот почему вам нужен определенный тип делегата, такой как MethodInvoker, для вызова функции.
РЕДАКТИРОВАТЬ MethodInvoker, определенный вручную, поскольку он не существует в Compact Framework
public delegate void MethodInvoker();
public Image Imagen
{
get { get return imagen; }
set {
imagen = value;
if (this.InvokeRequired)
this.Invoke(new MethodInvoker(this.Invalidate));
else
this.Invalidate();
}
}