2011-06-19 13 views

Respuesta

6

Prueba esto:

this.Invoke((MethodInvoker) delegate 
{ 
    button1.Text = "hello world"; 
}); 

Aunque Action se introdujo en .NET 2.0, no se puede utilizar la expresión lambda () => ... sintaxis en .NET 2.0.

Por cierto, todavía se puede utilizar Action en .NET 2.0, siempre y cuando no se utiliza lambda sytax:

Action action = delegate { button1.Text = "hello world"; }; 
Invoke(action); 
+0

este funciona ... pero la respuesta de aligray, ¿por qué es que tengo ese error? No se puede convertir el método anónimo para escribir 'System.Delegate' porque no es un tipo delegado ... creo que sigue siendo el mismo.. –

1

Action<T> es la firma, que sólo significa que el método representado por la acción debe tomar un solo parámetro El tipo de parámetro depende de la firma de la llamada Invoke.

Algunos ejemplos de código de cómo representar las diversas firmas de Action:

var noArgs =() => button1.Text = "hello world"; // Action 
var oneArg = (arg) => button1.Text = "hello world"; // Action<T> 
var twoArgs = (arg1, arg2) => button1.Text = "hello world"; // Action<T,T> 

Si no necesita utilizar los parámetros para el método, eso está bien. Pero aún necesita declararlos en la expresión lambda.

Ahora, esto no responde cómo hacerlo desde .NET 2.0, pero supuse (quizás incorrectamente, me corrijan si estoy equivocado) que no sabían cómo las lambdas corresponden a los tipos de acción.

Cuestiones relacionadas