Bloqueo de WinForm

12/11/2004 - 13:16 por Enrique | Informe spam
Hola Grupo
Ya puse este mensaje dias atras pero la solucion que me dieron no funciono.
El tema es que tengo una clase (creada por mi) que trabaja con sockets, y al
recibir un mensaje de otra maquina, esa clase tiene un evento que me avisa.
Al instanciar ese evento desde WinForms, al recibirlo quiero hacer un
.Show() y se queda bloqueado el WinForm, con .ShowDialog() no se cuelga. Me
dijeron que pruebe con Application.DoEvents() pero es no funciona? Lo hice
despues de. Show() y en el form_Load de del WinForm que se abre. Otra prueba
que hice fue poner un boton y en el evento Click abrir el Form con .Show() y
ahi si funciona asi que estoy perdido.
Alguien tiene idea de que puede ser?

Gracias :)

Preguntas similare

Leer las respuestas

#1 Rubén D. Sánchez D.
14/11/2004 - 17:44 | Informe spam
Si con Application.DoEvents() no funciona te recomiendo que pruebes con un
Thread.

Saludos

Ing. Rubén Darío Sánchez D. (MCP)
www.programar.net : Recursos y aprendizaje de .NET
Bogotá, Colombia

"Enrique" wrote in message
news:
Hola Grupo
Ya puse este mensaje dias atras pero la solucion que me dieron no


funciono.
El tema es que tengo una clase (creada por mi) que trabaja con sockets, y


al
recibir un mensaje de otra maquina, esa clase tiene un evento que me


avisa.
Al instanciar ese evento desde WinForms, al recibirlo quiero hacer un
.Show() y se queda bloqueado el WinForm, con .ShowDialog() no se cuelga.


Me
dijeron que pruebe con Application.DoEvents() pero es no funciona? Lo hice
despues de. Show() y en el form_Load de del WinForm que se abre. Otra


prueba
que hice fue poner un boton y en el evento Click abrir el Form con .Show()


y
ahi si funciona asi que estoy perdido.
Alguien tiene idea de que puede ser?

Gracias :)


Respuesta Responder a este mensaje
#2 BigSus
15/11/2004 - 01:12 | Informe spam
Enrique wrote:
Hola Grupo
Ya puse este mensaje dias atras pero la solucion que me dieron no funciono.
El tema es que tengo una clase (creada por mi) que trabaja con sockets, y al
recibir un mensaje de otra maquina, esa clase tiene un evento que me avisa.
Al instanciar ese evento desde WinForms, al recibirlo quiero hacer un
..Show() y se queda bloqueado el WinForm, con .ShowDialog() no se cuelga. Me
dijeron que pruebe con Application.DoEvents() pero es no funciona? Lo hice
despues de. Show() y en el form_Load de del WinForm que se abre. Otra prueba
que hice fue poner un boton y en el evento Click abrir el Form con .Show() y
ahi si funciona asi que estoy perdido.
Alguien tiene idea de que puede ser?

Gracias :)




Buenas
A mi me ocurría lo mismo y lo solución que encontré fue esta:


//Clase que permite abrir un formulario de forma controlada
using System;
using System.Collections;
using System.Windows.Forms;

namespace BigSus.InvokeClass
{
public delegate void MethodCallInvoker (object[] o);

public class ControlInvoker
{
private class MethodCall
{
public MethodCallInvoker invoker;
public object[] arguments;

public MethodCall (MethodCallInvoker invoker,
object[] arguments)
{
this.invoker = invoker;
this.arguments = arguments;
}
}

private Control control;
private Queue argumentInvokeList = new Queue ();

public ControlInvoker (Control control)
{
this.control = control;
}

public void Invoke (MethodCallInvoker invoker, params
object[] arguments)
{
this.argumentInvokeList.Enqueue (new MethodCall
(invoker, arguments));
control.Invoke (new EventHandler (ControlInvoke));
}

private void ControlInvoke (object sender, EventArgs e)
{
MethodCall methodCall = (MethodCall)
argumentInvokeList.Dequeue();
methodCall.invoker (methodCall.arguments);
}
}
}


//////////////////////////////////////////////

//Código a ejecutar para abrir el formulario
BigSus.InvokeClass.ControlInvoker _inv = new
BigSus.InvokeClass.ControlInvoker(this);
_inv.Invoke(new BigSus.InvokeClass.MethodCallInvoker(AbrirAviso),
myMensaje);

//////////////////////////////////////////////

//Método que abre un formulario llamando a un constructor que recibe un
parámetro
private void AbrirAviso(Object[] oObjects)
{
new
BigSus.AvisoClass.AvisoForm((BigSus.MensajeClass.MensajeUsuario)oObjects[0]).Show();
}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida