Problema con threads y vector de labels

Iniciado por XxyoyxX, 3 Diciembre 2011, 19:19 PM

0 Miembros y 1 Visitante están viendo este tema.

XxyoyxX

Hola soy nuevo en esto de programar con c#, actualmente estoy realizando un programa para simular el movimiento de una abeja, con hilos (threads), en realidad no tengo ningun problema en mover 1 sola abeja, el problema esta cuando intento crear un vector de label para que cada vez que se presione un boton se inice un thread diferente y la imagen que se mueva sea otra, para poder instanciar el thread lo instancio de esta manera

t1 = new Thread(new ThreadStart(desplegar_especial));

el cual funciona de maravilla, pero simplemente para un solo label,

al intentar cambiar el label por un vector, y hacer lo mismo con el thread, lo manipulo de esta manera

teniendo en cuenta una posible variable contador,

abeja[contador].Visible = true;

De esta manera cada vez que entre al evento del boton coloca solo la imagen que se movera en ese momento,

t1[contador] = new Thread(new ThreadStart(desplegar_especial));

el problema esta en que el metodo desplegar_especial

no recibe parametros y para poder realizar la funcion de mover la imagen como es un vector necesito pasarle la posicion de la imagen que va a moverse, buscando en internet consegui que se puede instanciar un delegado que reciba un parametro y por medio de este ejecutar el metodo sobrecargado, lo hice

y quedo algo asi:

Nuestro_Hilo prueba = new Nuestro_Hilo(contador);

siendo Nuestro_Hilo la clase que implemento para realizar la nueva instancia   del thread,

t1[contador] = new Thread(new ThreadStart(prueba.mover_abeja));

t1[contador].Start();


en el codigo en si no marca error alguno ni al momento de ejecutarlo, pero cuando presiono click en el boton para iniciar el movimiento correspondiente de la imagen de acuerdo al vector, me sale el siguiente error:


alguien podria ayudarme, de antemano muchas gracias  :-\

seba123neo

me temo que es porque estas queriendo manipular controles de la UI en el thread y eso no se puede, ya que la UI corre en un thread diferente al que vos creas.

busca en internet que esta la solucion:

Invoke or BeginInvoke cannot be called on a control until the window handle has been created

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

XxyoyxX

Ok, tratare de revisarlo cualquier duda, posteare por aquí muchas gracias por responder!...  :D