Swa*_*pta 279 .net c# multithreading
如何将参数传递给Thread.ThreadStart()C#中的方法?
假设我有一个名为'download'的方法
public void download(string filename)
{
// download code
}
Run Code Online (Sandbox Code Playgroud)
现在我在main方法中创建了一个线程:
Thread thread = new Thread(new ThreadStart(download(filename));
Run Code Online (Sandbox Code Playgroud)
错误方法类型预期.
如何ThreadStart使用参数将参数传递给目标方法?
Mar*_*ell 675
最简单的就是
string filename = ...
Thread thread = new Thread(() => download(filename));
thread.Start();
Run Code Online (Sandbox Code Playgroud)
这个(结束ParameterizedThreadStart)的优点是你可以传递多个参数,并且你可以获得编译时检查而无需一直进行强制转换object.
Łuk*_*.pl 34
看看这个例子:
public void RunWorker()
{
Thread newThread = new Thread(WorkerMethod);
newThread.Start(new Parameter());
}
public void WorkerMethod(object parameterObj)
{
var parameter = (Parameter)parameterObj;
// do your job!
}
Run Code Online (Sandbox Code Playgroud)
您首先通过将委托传递给worker方法来创建线程,然后使用Thread.Start方法启动它,该方法将您的对象作为参数.
所以在你的情况下你应该像这样使用它:
Thread thread = new Thread(download);
thread.Start(filename);
Run Code Online (Sandbox Code Playgroud)
但是你的'下载'方法仍然需要取对象,而不是字符串作为参数.您可以将其强制转换为方法体中的字符串.
Nol*_*rin 24
您希望将ParameterizedThreadStart委托用于带参数的线程方法.(或者根本没有,让Thread构造函数推断.)
用法示例:
var thread = new Thread(new ParameterizedThreadStart(download));
//var thread = new Thread(download); // equivalent
thread.Start(filename)
Run Code Online (Sandbox Code Playgroud)
您也可以delegate这样...
ThreadStart ts = delegate
{
bool moreWork = DoWork("param1", "param2", "param3");
if (moreWork)
{
DoMoreWork("param1", "param2");
}
};
new Thread(ts).Start();
Run Code Online (Sandbox Code Playgroud)
另外的
Thread thread = new Thread(delegate() { download(i); });
thread.Start();
Run Code Online (Sandbox Code Playgroud)