如何将参数传递给Thread中的ThreadStart方法?

如何将参数传递给Thread.ThreadStart()C#中的方法?


假设我有一个名为'download'的方法


public void download(string filename)

{

    // download code

}

现在我在main方法中创建了一个线程:


Thread thread = new Thread(new ThreadStart(download(filename));

错误方法类型预期。


如何ThreadStart使用参数将参数传递给目标方法?


心有法竹
浏览 882回答 3
3回答

隔江千里

最简单的就是string filename = ...Thread thread = new Thread(() => download(filename));thread.Start();这个(结束ParameterizedThreadStart)的优点是你可以传递多个参数,并且你可以获得编译时检查而无需一直进行强制转换object。

拉丁的传说

看看这个例子:public void RunWorker(){    Thread newThread = new Thread(WorkerMethod);    newThread.Start(new Parameter());}public void WorkerMethod(object parameterObj){    var parameter = (Parameter)parameterObj;    // do your job!}您首先通过将委托传递给worker方法来创建线程,然后使用Thread.Start方法启动它,该方法将您的对象作为参数。所以在你的情况下你应该像这样使用它:    Thread thread = new Thread(download);    thread.Start(filename);但是你的'下载'方法仍然需要取对象,而不是字符串作为参数。您可以将其强制转换为方法体中的字符串。

拉莫斯之舞

您希望将ParameterizedThreadStart委托用于带参数的线程方法。(或者根本没有,让Thread构造函数推断。)用法示例:var thread = new Thread(new ParameterizedThreadStart(download));//var thread = new Thread(download); // equivalentthread.Start(filename)
打开App,查看更多内容
随时随地看视频慕课网APP