Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Vicks en 5 Marzo 2012, 23:53 pm



Título: [C#] Thread dentro de un objeto
Publicado por: Vicks en 5 Marzo 2012, 23:53 pm
Hola.

Estoy intentando montar una clase que sea capaz de lanzar uno de sus métodos en diferente thread.

Esta es la declaración de la clase:

Código
  1. class contador
  2.    {
  3.        //public static int _contador = 0;
  4.        public Label etiqueta;
  5.        public int repeticiones = 100000000;
  6.        private Thread tarea;
  7.  
  8.        private void bucle()
  9.        {
  10.            for (int i = 0; i < repeticiones; i++)
  11.            {
  12.                etiqueta.Text = i.ToString();
  13.  
  14.            }
  15.            Thread.Sleep(100);
  16.        }
  17.  
  18.        public void arranca()
  19.        {
  20.            tarea = new Thread(new ThreadStart(bucle));
  21.            tarea.Start();
  22.        }
  23.    }

tarea es el objeto Thread para crear el thread en el metodo arranca. El cual ya se encarga de lanzar el start. Como veis el metodo bucle es un bucle que va asignando el contador a una label de la propia clase.

La declaración de los objetos y las propiedades las etiquetas las hago en la clase programa:

Código
  1.        public static contador cont1 = new contador();
  2.        public static contador cont2 = new contador();
  3.  
  4.        public static void crea_etiquetas()
  5.        {
  6.            cont1.etiqueta = new Label();
  7.            cont2.etiqueta = new Label();
  8.  
  9.  
  10.            cont1.etiqueta.Size = new System.Drawing.Size(35, 13);
  11.            cont2.etiqueta.Size = new System.Drawing.Size(35, 13);
  12.            cont1.etiqueta.Text = "0";
  13.            cont2.etiqueta.Text = "0";
  14.            cont1.etiqueta.Location = new System.Drawing.Point(36, 54);
  15.            cont2.etiqueta.Location = new System.Drawing.Point(177, 54);
  16.  
  17.        }
  18.  

crea_etiquetas es llamada desde main, donde despues de crear el form, se "arrancan" los contadores.

Código
  1. main()
  2. {
  3.            .
  4.            .
  5.            .
  6.            crea_etiquetas();
  7.  
  8.            Application.Run(new Form1());
  9.  
  10.  
  11.            cont1.arranca();
  12.            cont2.arranca();
  13. }

Mi problema es que el programa arranca, pero las dos labels se quedan inmóviles a 0. Sin embargo el código de los threads creo que está bien...

Alguna pista?  :rolleyes:




Título: Re: [C#] Thread dentro de un objeto
Publicado por: Atrum en 9 Marzo 2012, 17:14 pm
Estas creando los objetos desde tu Main thread y estas tratando de accederlos desde el thread que tu creaste, esto podría ser el error, que Framework utilizas??