Foros del Web » Programación para mayores de 30 ;) » .NET »

Sucesos de subprocesos

Estas en el tema de Sucesos de subprocesos en el foro de .NET en Foros del Web. Hola, tengo una duda, que puede ser la fuente del error que me está dando una aplicación con sockets. La cuestión es la siguiente, la ...
  #1 (permalink)  
Antiguo 06/11/2005, 17:48
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Sucesos de subprocesos

Hola, tengo una duda, que puede ser la fuente del error que me está dando una aplicación con sockets. La cuestión es la siguiente, la aplicación cuenta con dos subprocesos más cada subproceso originado cuando un cliente neuvo que se conecta al servidor. En este subproceso, perteneciente a cada cliente, se origina un evento en el servidor cuando recibe un mensaje de alguno de estos. Cuando ocurre este evento, intento abrir otro form para mostrar el mensaje que llego y que pueda interactuar con el cliente correspondiente desde esa misma ventana, algo así como ocurre con el Messenger. El problema es que el formulario nunca se termina de crear y es como si entrara en un bucle sin fin, y me hace "colgar" la aplicación.
Mi pregunta es la siguiente: ¿se puede abrir una instancia de un formulario a partir de un controlador de eventos de un evento que se origina en un subproceso?

Muchas gracias por su ayuda.
Saludos!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 06/11/2005, 20:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Efectivamente era eso, no se puede abrir una instancia de un formulario a partir de un evento que se genera en un subproceso. Solamente lo puede hacer el proceso principal. Por lo tanto pude solucionarlo de esta forma:

Procedimiento controlador del evento:

Dim MyDelegate As New ShowFormDelegate(AddressOf ShowForm)

Me.Invoke(MyDelegate, New Object() {acá va la lista de argumentos que le paso al procedimiento ShowForm}


Creo el delegado:

Delegate Sub ShowFormDelegate(mismos argumentos del procedimiento ShowForm)

Private Sub ShowForm(ByVal Ip As System.Net.IPEndPoint, ByVal ClientNickname As String, ByVal Data As String)

Dim NewForm As New frmIndividualMessages(le paso los argumentos necesarios)

NewForm.Show()

Y Listo!.

Se que es muy poco probable que a alguien le sea útil, pero ahí lo tienen por las dudas.
Saludos a todos!.
__________________
Add, never Remove
  #3 (permalink)  
Antiguo 07/11/2005, 02:02
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo lo que hize cuando tuve ese problema es crear un timer que comprobase el valor booleano que cambiaba el subproceso, así si estaba cambiado, abría el formulario, si no, no.
  #4 (permalink)  
Antiguo 07/11/2005, 12:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Como comprobas eso?, esta buena la idea, me parece interesante, tenés algún ejemplo? o es demasiado largo el código?
Saludos!:
__________________
Add, never Remove
  #5 (permalink)  
Antiguo 08/11/2005, 00:15
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
no es largo, p.ejemplo:

Código:
Dim comprueba as boolean = False
Dim miHilo as Theard

Private sub Form1(..)
miHilo = new Theard(HacerAlgo)
miHilo.Start
Timer1.Start()
end sub

Private Sub HacerAlgo
EsperarLeer    'Puerto, socket, lo que sea
 If Leer
   comprueba = true
 End IF
End Sub

Private Sub Timer1_Tick(...)
  If Comprueba = true
    miHilo.Abort()
    Timer1.Stop()
    Dim miForm2 as new Form2
    miForm2.ShowDialog()
  End if
End Sub
Date cuenta que en el timer_tick paro el timer para que no se siga ejecutando. El resto es adaptarlo a tus necesidades.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:19.