Thread y delegate

16/09/2005 - 17:44 por Nux | Informe spam
Buenas !, necesito que alguien me oriente.


Necesito saber, o que alguien me explique como funcionan los delegados.



yo en estos momentos estoy ejecutando varios thread al mismo tiempo



for(int i=1; i<=Total;i++)

{

Thread oThread = new Thread(new ThreadStart(StartMethod));

oThread.Start();

}




public static void StartMethod(int Valor)

{

int Status;

Status=Valor;

Calls Llamada=new Calls();

Llamada.GenerateLlamada(typecall);

}


El tema es que le tengo que pasar al metodo StartMethod un parametro
(Valor), estuve leyendo y aparentemente tengo que crear un delegado del
metodo, pero la verdad es que no se como. Si alguien me puede dar una mano
desde ya muchas gracias



Saludos
 

Leer las respuestas

#1 A.Poblacion
16/09/2005 - 20:25 | Informe spam
"Nux" wrote in message
news:%
Buenas !, necesito que alguien me oriente.
[...]
Thread oThread = new Thread(new ThreadStart(StartMethod));
[...]
public static void StartMethod(int Valor)
[...]
El tema es que le tengo que pasar al metodo StartMethod un parametro
(Valor), estuve leyendo y aparentemente tengo que crear un delegado del
metodo, pero la verdad es que no se como.



*YA* estás creando un delegado: la instrucción que has metido, "new
ThreadStart(StartMethod)", lo que hace es crear un delegado del tipo
TreadStart, e inicializarlo apuntando a tu método.
Por desgracia, de esta manera no puedes pasar un parámetro a tu método:
El constructor del la clase Thread, al que llamas al hacer el "new Thread",
requiere obligatoriamente un delegado del tipo "ThreadStart", y no puede ser
ningún otro tipo de delegado. Y el tipo ThreadStart está definido como
"delegado que sirve para apuntar a subrutinas que no reciben ningún
parámetro".

Para arrancar un thread pasándole un parámetro se recurre al siguiente
truco: Tienes que crear una rutina que no reciba ningún parámetro y meterla
dentro de una clase. En la clase metes una variable de instancia, que
inicializas con el parámetro que quieras al instanciar la clase. Y al
delegado que usas para arrancar el thread le pasas la función sin parámetros
que tienes dentro de la instancia de tu clase. Y la función sin parámetros,
cuando necesite el parámetro, lo lee de la variable de instancia de la
clase.

Preguntas similares