Colección de citas famosas - Slogan de motivación - ¿Por qué C# debería usar Invoke? ¿Cuál es la diferencia entre este y BeginInvoke?

¿Por qué C# debería usar Invoke? ¿Cuál es la diferencia entre este y BeginInvoke?

Delegate se usa sin excepción cuando se usa Invoke o BeginInvoke.

1. ¿Por qué la clase Control proporciona los mecanismos Invoke y BeginInvoke?

La razón principal de este problema ya es bien conocida por los programadores de dotnet. Me gustaría tomarme un tiempo para registrarla en mi registro nuevamente para recordarla en el futuro.

1. Mecanismo de mensajes del programa de Windows

Los programas GUI de Windows se basan en el mecanismo de mensajes. Hay un hilo principal que mantiene un suministro de mensajes. Esta bomba de mensajes mantiene vivos y en buen estado los programas de Windows.

Bucle de mensajes del programa GUI de Windows

El programa de Windows tiene una cola de mensajes, y todos los mensajes en el formulario son la fuente principal de mensajes en esta cola. El bucle while aquí utiliza el método GetMessage(), que es un método de bloqueo, es decir, el método se bloqueará cuando la cola esté vacía, de modo que el bucle while deje de moverse. Esto evita que un programa agote la CPU sin ningún motivo. , provocando que otros programas tengan dificultades para obtener una respuesta. Por supuesto, se puede utilizar otro método en algunos programas que requieren el máximo movimiento de la CPU. Por ejemplo, en algunos juegos 3D o juegos de estrategia en tiempo real, generalmente se utiliza el método PeekMessage(). que todo el juego sea fluido y con una velocidad de fotogramas relativamente alta.

Este hilo principal mantiene el formulario completo y los subcontroles anteriores. Cuando recibe un mensaje, llama al método DispatchMessage para enviar el mensaje, lo que provoca una llamada al procedimiento de ventana en el formulario. Dentro del procedimiento de ventana se encuentra, por supuesto, el código de actualización de datos del formulario y otros códigos proporcionados por el programador.

2. Bucle de mensajes en dotnet

public static void Main(string[] args)

{

Formulario f = nuevo formulario ();

Application.Run(f);

}

El programa de formulario Dotnet encapsula el bucle while anterior, que se pasa a través de la Aplicación Iniciada por. Método de ejecución.

3. El problema de operar controles GUI fuera del hilo

Si opera los controles en el formulario de Windows desde otro hilo, competirá con el hilo principal, provocando eventos impredecibles

p>