为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2019-09-18 15:15:19
如何将参数传递给Thread.ThreadStart()C#中的方法?假设我有一个名为'download'的方法public void download(string filename){    // download code}现在我在main方法中创建了一个线程:Thread thread = new Thread(new ThreadStart(download(filename));错误方法类型预期。如何ThreadStart使用参数将参数传递给目标方法?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

最简单的就是


string filename = ...

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

thread.Start();

这个(结束ParameterizedThreadStart)的优点是你可以传递多个参数,并且你可以获得编译时检查而无需一直进行强制转换object。


查看完整回答
反对 回复 2019-09-18
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

看看这个例子:


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);

但是你的'下载'方法仍然需要取对象,而不是字符串作为参数。您可以将其强制转换为方法体中的字符串。


查看完整回答
反对 回复 2019-09-18
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您希望将ParameterizedThreadStart委托用于带参数的线程方法。(或者根本没有,让Thread构造函数推断。)


用法示例:


var thread = new Thread(new ParameterizedThreadStart(download));

//var thread = new Thread(download); // equivalent


thread.Start(filename)


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 942 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信