2011-03-25 20 views
15

encontré un muy buen fragmento de código que ejecuta todos los métodos en un hilo separado. el código como sigueCómo ejecutar el método en el hilo separado

private static void Method1() 
{ 
    //Method1 implementation 
} 

private static void Method2() 
{ 
    //Method2 implementation 
} 

private static void RunMethodInSeparateThread(Action action) 
{ 
    var thread = new Thread(new ThreadStart(action)); 
    thread.Start(); 
} 

static void Main(string[] args) 
{ 
    RunMethodInSeparateThread(Method1); 
    RunMethodInSeparateThread(Method2); 
} 

en este caso cómo podría i paso parámetro a un método y también podría haber situación en la que Método1 puede necesitar 2 parámetro y donde Método2 puede necesitar 3 parámetro. en esta situación, cómo construir RunMethodInSeparateThread de forma genérica, que aceptará muchos param y pasará al método. por favor ayúdame con el código. gracias

Respuesta

29

Para ejecutar un código en otro hilo que podría hacer:

new Thread(delegate() { 
    Method1(param1, param2); 
}).Start(); 

Usted puede aceptar un conjunto de parámetros o un diccionario para sus métodos que necesitan aceptar un número variable de parámetros. O puede crear métodos separados que permitan una cantidad diferente de parámetros. Por ejemplo:

private static void Method1() 
{ 
    //Method1 implementation 
} 

private static void Method1(int Param1) 
{ 
    //Method1 implementation 
} 

private static void Method1(int Param1, int Param2) 
{ 
    //Method1 implementation 
} 
+0

gracias grande;) – Thomas

+0

Esto es simple y funciona muy bien – Dammer15

6

Si Método1 y Método2 son bastante corto corriendo la mejor manera de hacer esto no es crear un nuevo hilo. Puede utilizar el grupo de subprocesos .NET en su lugar, así:

private static void Method1(int x) 
{ 
    //Method1 implementation 
} 

private static void Method2(int x, int y) 
{ 
    //Method2 implementation 
} 

public static void Main() 
{ 
    ThreadPool.QueueUserWorkItem(() => Method1(4)); 
    ThreadPool.QueueUserWorkItem(() => Metho2(13, 7)); 
} 
+0

no se compilará. – jgauffin

2
private static void Method1(int x, int y, int c) 
{ 
    //Method1 implementation 
} 

static void Main(string[] args) 
{ 
    ThreadPool.QueueUserWorkItem(state => Method1(1,2,3)); 
} 
+0

Ahh, olvidé el argumento "estado". Gracias, jgauffin. – JohnC

7

Con .NET 4, el método de RunMethodInSeparateThread parece un poco redundante en mi opinión. Me acabo de hacer esto:

Task.Factory.StartNew(() => { Method1(param1); }); 
Task.Factory.StartNew(() => { Method2(param1, param2); }); 
Cuestiones relacionadas