2011-01-12 32 views
6

Tengo un hilo en mi aplicación, cuyo propósito es escuchar los mensajes del servidor y actuar de acuerdo con lo que recibe.Nuevo formulario en un hilo diferente

Me encontré con un problema cuando quise disparar un mensaje del servidor, que cuando la aplicación cliente lo recibe, la aplicación del cliente abriría un nuevo formulario. Sin embargo, esta nueva forma simplemente se congela al instante.

Creo que lo que está sucediendo es que el nuevo formulario se carga en el mismo hilo que el hilo que escucha el servidor, que por supuesto está ocupado escuchando en la transmisión, a su vez bloqueando el hilo.

Normalmente, para mis otras funciones en el hilo de escucha del cliente, utilizaría invocaciones para actualizar la interfaz de usuario del formulario principal, así que supongo que lo que estoy preguntando es si hay una forma de invocar un nuevo formulario en la forma principal.

Respuesta

15

Supongo que esto es Windows Forms y no WPF? De su hilo de fondo, no debe intentar crear ninguna forma, control, etc. o manipularlos. Esto solo funcionará desde el hilo principal que tiene un bucle de mensaje en ejecución y puede procesar mensajes de Windows.

Así que para obtener su código a ejecutar en el hilo principal en lugar del subproceso en segundo plano, se puede utilizar el método Control.BeginInvoke así:

private static Form MainForm; // set this to your main form 

private void SomethingOnBackgroundThread() { 

    string someData = "some data"; 

    MainForm.BeginInvoke((Action)delegate { 

     var form = new MyForm(); 
     form.Text = someData; 
     form.Show(); 

    }); 
} 

Lo principal a tener en cuenta es que si el el hilo de fondo no necesita ninguna respuesta del hilo principal, debe usar BeginInvoke, no Invoke. De lo contrario, podría entrar en un punto muerto si el hilo principal está ocupado esperando en el hilo de fondo.

0

Básicamente, usted mismo dio la respuesta: simplemente ejecute el código para crear el formulario en el hilo de la GUI, utilizando Invoke.

Cuestiones relacionadas