我在带有参数功能的线程中创建了什么?
Thread t = new Thread(new ParameterizedThreadStart(fetchQuotes(cp)));
void fetchQuotes(SomeObject obj)
{
[DoSomething With SomeObject]
}
答案 0 :(得分:1)
这里最简单的方法是使用非参数化(ThreadStart
)签名的闭包:
Thread t = new Thread(() => fetchQuotes(cp));
...
t.Start();
这是静态检查编译时的正确性,方便(例如,您可以传递任意数量的参数)。
另一种方法是将object
作为参数(ParameterizedThreadStart
)传递:
Thread t = new Thread(fetchQuotes);
...
t.Start(cp);
...
void fetchQuotes(object obj)
{
SomeObject obj2 = (SomeObject) obj;
[DoSomething With SomeObject]
}
这里我们传递object
,所以不要在编译时进行类型检查。 “braindead”错误只会在运行时出现。
答案 1 :(得分:1)
我将在此处添加TPL语法以获得完整性(请参阅我之前的评论)。
Task task = new Task(() => FetchQuotes(arg));
task.Start();
任务库有很多选项可以在调用线程上运行,或者在一个或多个线程上运行async等。 http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx