termino saber parametros otro net metodos hilos desde creacion control con como asp acceder c# multithreading

saber - hilos en c# windows forms



Cómo crear un hilo? (5)

El siguiente método es lo que quiero que se haga en ese hilo:

public void Startup(int port,string path) { Run(path); CRCCheck2(); CRCCheck1(); InitializeCodeCave((ushort)port); }

Intenté lo que pude encontrar en Google, pero nada funcionó

public void Test(int port,string path) { Thread t = new Thread(Startup(port,path)); } public void TestA(int port,string path) { Thread t = new Thread(Startup); t.Start (port,path); }

Ambos no compilan, ¿cómo hacer eso?


El método que desea ejecutar debe ser un delegado ThreadStart . Consulte la documentación de Thread en MSDN. Tenga en cuenta que puede ordenar el inicio de dos parámetros con un cierre. Algo como:

var t = new Thread(() => Startup(port, path));

Tenga en cuenta que es posible que desee volver a visitar su método de accesibilidad. Si veo una clase que comienza un hilo en su propio método público de esta manera, me sorprenderá un poco.


Las siguientes formas funcionan.

// The old way of using ParameterizedThreadStart. This requires a // method which takes ONE object as the parameter so you need to // encapsulate the parameters inside one object. Thread t = new Thread(new ParameterizedThreadStart(StartupA)); t.Start(new MyThreadParams(path, port)); // You can also use an anonymous delegate to do this. Thread t2 = new Thread(delegate() { StartupB(port, path); }); t2.Start(); // Or lambda expressions if you are using C# 3.0 Thread t3 = new Thread(() => StartupB(port, path)); t3.Start();

Los métodos de inicio tienen la siguiente firma para estos ejemplos.

public void StartupA(object parameters); public void StartupB(int port, string path);


Me gusta la Task Factory de System.Threading.Tasks. Puedes hacer algo como esto:

Task.Factory.StartNew(() => { // Whatever code you want in your thread });

Tenga en cuenta que la fábrica de tareas le brinda opciones de conveniencia adicionales como ContinueWith :

Task.Factory.StartNew(() => {}).ContinueWith((result) => { // Whatever code should be executed after the newly started thread. });

También tenga en cuenta que una tarea es un concepto ligeramente diferente de los hilos. Encajan perfectamente con las palabras clave async / await, mira here .


Su ejemplo falla porque los métodos Thread toman uno o cero argumentos. Para crear un hilo sin pasar argumentos, su código se ve así:

void Start() { // do stuff } void Test() { new Thread(new ThreadStart(Start)).Start(); }

Si desea pasar datos al hilo, debe encapsular sus datos en un solo objeto, ya sea una clase personalizada de su propio diseño, un objeto de diccionario u otra cosa. A continuación, debe utilizar el delegado ParameterizedThreadStart , así:

void Start(object data) { MyClass myData = (MyClass)myData; // do stuff } void Test(MyClass data) { new Thread(new ParameterizedThreadStart(Start)).Start(data); }


public class ThreadParameter { public int Port { get; set; } public string Path { get; set; } } Thread t = new Thread(new ParameterizedThreadStart(Startup)); t.Start(new ThreadParameter() { Port = port, Path = path});

Cree un objeto con los objetos de puerto y ruta y páselo al método de inicio.