2

我正在使用这样的构造:

string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
   MessageBox.Show(url);
});

如何将 myurl 传递给匿名函数?

4

1 回答 1

7

直接使用即可:

string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
   MessageBox.Show(myurl);
});

这称为“关闭”。

如果您不想这样做,则可以将 url 作为另一个参数传递给StartNew

string myurl = "http://google.de";
Task.Factory.StartNew(url =>
{
   MessageBox.Show((string)url);
}, myurl);

第二个版本是更多的代码,它将您限制为只有一个参数(因此,如果您有多个参数,则需要使用闭包或将所有参数放入某个容器对象中)并将参数键入到object,从而迫使您将其转换为方法主体中的真实内容。另一方面,优点是与关闭变量相关的开销很小,使用此方法可能会避免这些开销。请注意,在大多数情况下,这不会是一个重要的性能问题,因此您应该选择最方便的方法,除非您有理由不这样做。

于 2013-05-03T16:53:02.743 回答