2012-01-14 16 views

Respuesta

36

¡No solo espera ThreadStart métodos vacíos, sino que también espera que no acepten ningún argumento! Puede envolverlo en un lambda, un delegado anónimo o una función estática con nombre.

Esta es una manera de hacerlo:

string res = null; 
Thread newThread = new Thread(() => {res = sayHello("world!");}); 
newThread.Start(); 
newThread.Join(1000); 
Console.Writeline(res); 

Aquí es otra sintaxis:

Thread newThread = new Thread(delegate() {sayHello("world!");}); 
newThread.Start(); 

La tercera sintaxis (con una función llamada) es el más aburrido:

// Define a "wrapper" function 
static void WrapSayHello() { 
    sayHello("world!); 
} 

// Call it from some other place 
Thread newThread = new Thread(WrapSayHello); 
newThread.Start(); 
+0

Ha sido útil para mí. Gracias. –

+0

No pude obtener el valor de retorno. ¿Cómo puede usar el valor de retorno? –

+1

[ParameterizedThreadStart Delegate] (http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx) –

3

Debe utilizar un Task para tal fin.

0

Si puede utilizar cualquier método de roscado, tratar BackgroundWorker:

BackgroundWorker bw = new BackgroundWorker(); 
public Form1() 
{ 
    InitializeComponent(); 

    bw.DoWork += bw_DoWork; 
    bw.RunWorkerCompleted += bw_RunWorkerCompleted; 
    bw.RunWorkerAsync("MyName"); 
} 

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    Text = (string)e.Result; 
} 

void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string name = (string)e.Argument; 
    e.Result = "Hello ," + name; 
} 
Cuestiones relacionadas