C#thread方法返回一个值?

时间:2012-01-14 04:25:40

标签: c# multithreading return void

  

可能重复:
  Access return value from Thread.Start()'s delegate function

public string sayHello(string name)
{
    return "Hello ,"+ name;
}

我如何在Thread中使用此方法?

ThreadStart方法只接受void方法。

我在等你的帮助。 谢谢。

3 个答案:

答案 0 :(得分:38)

ThreadStart不仅期望void方法,还期望它们不接受任何参数!您可以将其包装在lambda,匿名委托或命名静态函数中。

这是一种方法:

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

这是另一种语法:

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

第三种语法(带有命名函数)是最无聊的:

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

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

答案 1 :(得分:3)

您应该为此目的使用Task

答案 2 :(得分:0)

如果您可以使用任何线程方法,请尝试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;
}