C#线程方法返回一个值
本文关键字:一个 线程 方法 返回 | 更新日期: 2023-09-27 18:20:20
可能重复:
从Thread.Start()访问返回值';s委托函数
public string sayHello(string name)
{
return "Hello ,"+ name;
}
如何在Thread中使用此方法?
ThreadStart方法只接受void方法。
我在等你的帮助。非常感谢。
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();
您应该为此目的使用Task。
如果可以使用任何线程方法,请尝试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;
}