Ventana Mdi con ventanas hijas en threads

24/11/2004 - 17:57 por Kano | Informe spam
Veamos tengo una aplicación con la ventana principal mdi q contiene
ventanas hijas.
Quiero montar las ventanas hijas cada una en un thread
Tengo una clase que pasandole la clase del formulario y la ventana padre
debe encargarse de crear el thread montar la ventana y visualizarla.
Funciona todo correctamente menos la linea en la que se asigna la
propiedad de MdiParent del formulario que me da una excecion con el
mensaje "Controls created on one thread cannot be parented to a control
on a different thread."
El codigo es el siguiente


private class b_i_window_threader
//el hilador de ventanas
{
private Object i_frm;
private Thread i_th_frm;
private Type i_t_tipo;
private Form i_frm_padre;
public b_i_window_threader(Type tipo,Form Padre)
{
i_t_tipo=tipo;
i_frm_padre=Padre;
i_th_frm= new Thread(new ThreadStart(carga));
i_th_frm.Start();
}
public void carga()
{
i_frm = Activator.CreateInstance(i_t_tipo);
String key = Guid.NewGuid().ToString();
((Form)i_frm).AccessibleName = key;
/*error*/ ((Form)i_frm).MdiParent =i_frm_padre ;
i_th_frm.Name=((Form)i_frm).Text;
Application.Run((Form)i_frm);
}
}

como puedo evitar este problema?

Gracias por adelantado:
Kano
 

Leer las respuestas

#1 pablo crosio
25/11/2004 - 00:55 | Informe spam
hola!

no se si te sirva pero yo realice una implementacion similar de la siguiente
forma:

creo los mdi hijos en el thread principal y luego creo nuevos threads para
ejecutar los metodos propios de los mdi.

ademas por lo que veo estas creando tantos loops de mensajes por cada hijo
que tenes, quizas te convenga trabajar con el loop de mensajes del formulario
mdi padre solamente los mensajes se redireccionan automaticamente a la
ventana hija que corresponda...

salu2!!

pablo

"Kano" escribió:

Veamos tengo una aplicación con la ventana principal mdi q contiene
ventanas hijas.
Quiero montar las ventanas hijas cada una en un thread
Tengo una clase que pasandole la clase del formulario y la ventana padre
debe encargarse de crear el thread montar la ventana y visualizarla.
Funciona todo correctamente menos la linea en la que se asigna la
propiedad de MdiParent del formulario que me da una excecion con el
mensaje "Controls created on one thread cannot be parented to a control
on a different thread."
El codigo es el siguiente


private class b_i_window_threader
//el hilador de ventanas
{
private Object i_frm;
private Thread i_th_frm;
private Type i_t_tipo;
private Form i_frm_padre;
public b_i_window_threader(Type tipo,Form Padre)
{
i_t_tipo=tipo;
i_frm_padre=Padre;
i_th_frm= new Thread(new ThreadStart(carga));
i_th_frm.Start();
}
public void carga()
{
i_frm = Activator.CreateInstance(i_t_tipo);
String key = Guid.NewGuid().ToString();
((Form)i_frm).AccessibleName = key;
/*error*/ ((Form)i_frm).MdiParent =i_frm_padre ;
i_th_frm.Name=((Form)i_frm).Text;
Application.Run((Form)i_frm);
}
}

como puedo evitar este problema?

Gracias por adelantado:
Kano

Preguntas similares