使用here中关于lambda运算符的答案,我有一个接受参数并且工作正常的线程。但是我希望能够从线程中获取内容。这就是代码的样子:
namespace Renamer
{
class RenameThread
{
public Thread StartRename(bool commit, ICollection checkeditems, ArrayList rules)
{
var t = new Thread(() => doRename(commit, checkeditems, rules));
t.Start();
return t;
}
private void doRename(bool commit, ICollection checkeditems, ArrayList rules)
{
ArrayList filenames = new ArrayList();
ArrayList newfilenames = new ArrayList();
filenames.AddRange(checkeditems);
//do stuff with filenames
//I want to be able to return newfilenames (or perhaps some object that contains it)
}
}
}
点击按钮调用它:
private void btnTest_Click(object sender, EventArgs e)
{
RenameThread rt = new RenameThread();
Thread renameThread = rt.StartRename(false, clbFiles.CheckedItems, rules);
renameThread.Join();
}
在Java中我只是实现Runnable
所以我可以直接访问线程的成员和字段,如果我需要它们,但因为我不能继承Thread
我在关于我应该做些什么,我有点失落。
答案 0 :(得分:2)
您可以使用Tasks:
var renameTask = Task.Factory.StartNew(() => Rename(...));
您现在可以通过访问Join
等待任务完成,类似于Result
:
var newFilenames = renameTask.Result;
或者你可以这样做:
renameTask.ContinueWith(t => Console.WriteLine(t.Result));
我的回答是假设Rename
是一种返回string
的方法。