with threadstart thread parametros parameterizedthreadstart new example con c# .net multithreading

c# - parametros - ¿Cómo pasar parámetros al método ThreadStart en Thread?



new thread c# (8)

¿Qué tal esto: (o está bien usar así?)

var test = "Hello"; new Thread(new ThreadStart(() => { try { //Staff to do Console.WriteLine(test); } catch (Exception ex) { throw; } })).Start();

¿Cómo pasar parámetros al método Thread.ThreadStart() en C #?

Supongamos que tengo un método llamado ''descargar''

public void download(string filename) { // download code }

Ahora he creado un hilo en el método principal:

Thread thread = new Thread(new ThreadStart(download(filename));

tipo de método de error esperado.

¿Cómo puedo pasar parámetros a ThreadStart con método de destino con parámetros?


Desea utilizar el delegado ParameterizedThreadStart para los métodos de subproceso que toman parámetros. (O ninguno en realidad, y deje que el constructor Thread infiera).

Ejemplo de uso:

var thread = new Thread(new ParameterizedThreadStart(download)); //var thread = new Thread(download); // equivalent thread.Start(filename)


En adicional

Thread thread = new Thread(delegate() { download(i); }); thread.Start();


Esta es la manera perfecta ...

private void func_trd(String sender) { try { imgh.LoadImages_R_Randomiz(this, "01", groupBox, randomizerB.Value); // normal code ThreadStart ts = delegate { ExecuteInForeground(sender); }; Thread nt = new Thread(ts); nt.IsBackground = true; nt.Start(); } catch (Exception) { } } private void ExecuteInForeground(string name) { //whatever ur function MessageBox.Show(name); }


Lo más simple es solo

string filename = ... Thread thread = new Thread(() => download(filename)); thread.Start();

La (s) ventaja (es) de esto (sobre ParameterizedThreadStart ) es que puede pasar varios parámetros y obtener una verificación en tiempo de compilación sin necesidad de lanzar desde el object todo el tiempo.


Mira este ejemplo:

public void RunWorker() { Thread newThread = new Thread(WorkerMethod); newThread.Start(ParameterObject); } public void WorkerMethod(object parameterObject) { // do your job! }

Primero está creando un subproceso pasando un método de delegado a trabajador y luego lo inicia con un método Thread.Start que toma su objeto como parámetro.

Así que en tu caso deberías usarlo así:

Thread thread = new Thread(download); thread .Start(filename);

Pero su método de ''descarga'' todavía necesita tomar el objeto , no la cadena como parámetro. Puedes lanzarlo a cuerdas en tu cuerpo de método.


Puede encapsular la función de hilo (descargar) y los parámetros necesarios (nombre de archivo) en una clase y usar el delegado ThreadStart para ejecutar la función de hilo.

public class Download { string _filename; Download(string filename) { _filename = filename; } public void download(string filename) { //download code } } Download = new Download(filename); Thread thread = new Thread(new ThreadStart(Download.download);


También podrías delegate así ...

ThreadStart ts = delegate { bool moreWork = DoWork("param1", "param2", "param3"); if (moreWork) { DoMoreWork("param1", "param2"); } }; new Thread(ts).Start();