• Lunes 18 de Noviembre de 2024, 01:44

Autor Tema:  Threads y Textbox  (Leído 1351 veces)

Painkiller

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Threads y Textbox
« en: Miércoles 17 de Marzo de 2010, 18:23 »
0
Hola que tal, pues bien tengo un form donde muestro un textbox, dentro del codigo defini una clase "Server" la cual al recibir un cliente separa esa conexion en un nuevo thread, el problema es que quiero imprimir y/o actualizar el estado de cada conexion en el textbox (a manera de log), como ya sabran no es posible directamente ya que las funciones modificadoras estan en otra clase, y ademas en otros thread. Ya he tratado de hacerlo con delegados y eventos pero al ser diferentes thread me salta una excepcion :argh: . ¿Alguien conoce alguna otra solucion posible?, he leido que se podria usar el BackgroundWorker pero no entiendo de que forma me podria ayudar (entiendo que seria una especie de sustituto de threads) de antemano gracias!

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Threads y Textbox
« Respuesta #1 en: Jueves 18 de Marzo de 2010, 01:43 »
0
Si tu problema es al interactuar desde un hilo A con un form F creado en un hilo B, eso lo podes usar haciendo uso del metodo Control.Invoke(Delegate) sobre el control TextBox.

Te copio un ejemplo que tengo, ta probado:

Citar
public static class Program
{
        public static void Main()
        {
            SendMailForm form = new SendMailForm();
            new Thread(ChangeText).Start(form);
            Application.Run(form);
        }

        private static void ChangeText(object formObj)
        {
            SendMailForm form = (SendMailForm) formObj;
         
            Delegate del = GetDelegate();

            form.Invoke(del, form, "texto a setear sobre el campo txtBody del form SendMailForm");
        }

        private static Delegate GetDelegate()
        {
               MethodInfo method = typeof(Program).GetMethod("ChangeTextBox");
               return Delegate.CreateDelegate(typeof (ChangeTextDel), method);
        }
}

Eso suponiendo que tu form se llama SendMailForm y el textBox textBody, y el SendMailForm tendria:
Citar
       public delegate void ChangeTextDel(SendMailForm f, string text);
        public static void ChangeTextBox(SendMailForm f, string text)
        {
            f.txtBody.Text = text;
        }

Painkiller

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Threads y Textbox
« Respuesta #2 en: Jueves 18 de Marzo de 2010, 16:05 »
0
Me funciono de maravilla, no habia probado usando el Invoke, Gracias por la ayuda!  :good:  :beer: