
14/11/2005, 21:16
|
| | Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 10 meses Puntos: 9 | |
Si, te está pasando lo mismo que me paso a mi, aunque tu lógica sea distinta a la que utilizo yo. El problema es que el evento se origina en un subproceso que no es el principal, y el proceso principal es el único que puede abrir un nuevo formulario, por eso se queda colgado. Yo lo solucioné con un delegado. Te paso el código:
El primer procedimiento ClientApp_MessageReceived es el que maneja el evento que se produce en el subproceso cuando se recibe un nuevo mensaje. Como desde este evento no podés abrir el formulario, entonces lo único que haces es crear una instancia del delegado que defino posteriormente y hacer que el formulario invoque a este delegado para que ejecute el método que le pasas como parametro de AddressOf.
El método ShowForm es en realidad el que se encarga de hacer toda la tarea. Este es el método hacia el que apunta el delegado y el cual te muestra el formulario. PrivateSub ClientApp_MessageReceived(ByVal Data AsString, ByVal IpFrom AsString, ByVal ClientNickname AsString) Handles ClientApp.MessageReceived Dim MyDelegate AsNew ShowFormDelegate(AddressOf ShowForm) Me.Invoke(MyDelegate, NewObject() {Data, IpFrom, ClientNickname, ClientApp}) EndSub DelegateSub ShowFormDelegate(ByVal Data AsString, ByVal IpFrom AsString, ByVal ClientNickname AsString, ByVal C As Client) PrivateSub ShowForm(ByVal Data AsString, ByVal IpFrom AsString, ByVal ClientNickname AsString, ByVal C As Client) IfNot CurrentChattingForms.ContainsKey(IpFrom) Then Dim frmChat AsNew frmChat() AddHandler frmChat.ClosingForm, AddressOf frmChat_ClosingForm
frmChat.Text = ClientNickname
frmChat.Show()
frmChat.ClientApp = C
frmChat.IpFrom = IpFrom
frmChat.Message = Data
CurrentChattingForms.Add(IpFrom, frmChat) Else Dim CurrentForm As frmChat = CurrentChattingForms(IpFrom)
CurrentForm.Message = Data EndIf EndSub Espero que te sirva de algo para ir pagandote parte de la cuota que te debo por haberme ayudado con lo mio. Saludos!.
__________________ Add, never Remove |