[C#] Invoke(Delegate)


Answers

Un objeto de control o ventana en Windows Forms es solo un contenedor alrededor de una ventana Win32 identificada por un identificador (a veces llamado HWND). La mayoría de las cosas que haga con el control eventualmente resultarán en una llamada a la API de Win32 que use este identificador. El identificador pertenece al subproceso que lo creó (generalmente el subproceso principal) y no debe ser manipulado por otro subproceso. Si por algún motivo necesita hacer algo con el control de otro hilo, puede usar Invoke para solicitar al hilo principal que lo haga en su nombre.

Por ejemplo, si desea cambiar el texto de una etiqueta de un hilo de trabajo, puede hacer algo como esto:

theLabel.Invoke(new Action(() => theLabel.Text = "hello world from worker thread!"));
Question

¿Alguien puede explicar esta declaración escrita en este link

Invoke(Delegate):

Ejecuta el delegado especificado en el subproceso que posee el identificador de ventana subyacente del control.

¿Alguien puede explicar lo que esto significa (especialmente el audaz) no puedo entenderlo claramente?




Los delegados son esencialmente Action línea o Func<T> . Puede declarar un delegado fuera del alcance de un método que esté ejecutando o utilizando una expresión lambda ( => ); porque ejecuta el delegado dentro de un método, lo ejecuta en el hilo que se está ejecutando para la ventana / aplicación actual, que es el bit en negrita.

Ejemplo de Lambda

int AddFiveToNumber(int number)
{
  var d = (int i => i + 5);
  d.Invoke(number);
}



Invoque ((MethodInvoker) delegate {textBox1.Text = "Test";});




Significa que el delegado se ejecutará en el subproceso UI, incluso si llama a ese método desde un subprocesador o subproceso de grupo de subprocesos. Los elementos de la interfaz de usuario tienen afinidad por el hilo : solo les gusta hablar directamente con un hilo: el hilo de la interfaz de usuario. El subproceso de la interfaz de usuario se define como el subproceso que creó la instancia de control y, por lo tanto, está asociado con el identificador de ventana. Pero todo eso es un detalle de implementación.

El punto clave es: llamarás a este método desde un hilo de trabajo para que puedas acceder a la interfaz de usuario (para cambiar el valor en una etiqueta, etc.), ya que no puedes hacer eso desde ningún otro hilo que no sea el hilo de la interfaz de usuario.






Links