Inquiridor
MultiThread X Construtor WinForms

Pergunta
-
Vai ser meio dificil de explicar, mas vamos lá!
Tenho um objeto Socket (Envio/Recebimento) que é processado por um outro objeto (Tratamento) que trata os dados recebidos pelo socket, só que a aplicação é Winforms e então algumas vezes o objeto Tratamento tem de manipular um formulario ou outro (Através de delegates) e eu observei uns problemas mistériosos que acontece com os formulários que recebem o objeto Tratamento via construtor (new frmComunicacao(Tratamento tconexao)) e neste objeto tratamento esta funcionando em uma thread diferente do formulário.
A pergunta será, como passar o Tratamento para o formulário:
a) new frmComunicacao(Tratamento tconexao);
b) comunicacao.TrataConexao = tconexao.
Atenciosamente,
Nilo Ferreira
Todas as Respostas
-
Você quer saber como passar a mensagem qe você recebeu no socket para um objeto na tela???
Bem, se for isso, fassa o seguinte:
Code Snippetprivate void ShowText(string text)
{
if (this.TextBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(ShowText);
this.Invoke(d, new object[] { text });
}
else
{
this.TextBox1.Text = text;
}
}Você também pode usar essa função para passar os dados para uma variável do form.
A questão é que existe uma única thread para executar tudo que acontece no form, e você precisa passar o comando para essa thread executar (mais ou menos isso)...
-
-
-
-
O erro é esse:
System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto. at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) at System.Windows.Forms.NativeWindow.DefWndProc(Message& m) at System.Windows.Forms.Control.DefWndProc(Message& m) at System.Windows.Forms.Control.WmUpdateUIState(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at System.Windows.Forms.ContainerControl.WndProc(Message& m) at System.Windows.Forms.ParkingWindow.WndProc(Message& m) at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Isso ocorre qdo eu instancio o formulario, antes mesmo do show(), ele ocorre apenas em formularios que eu passo o Tratamento no construtor.
No construtor eu faço apneas o seguinte.
this.TrataConexao = TConexao; -