net*_*net 2 c# parameters task anonymous-function parameter-passing
我正在使用这样的结构:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
Run Code Online (Sandbox Code Playgroud)
如何将myurl传递给匿名函数?
直接使用它:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(myurl);
});
Run Code Online (Sandbox Code Playgroud)
这被称为"封闭".
如果您不想这样做,那么您可以将url作为另一个参数传递给StartNew:
string myurl = "http://google.de";
Task.Factory.StartNew(url =>
{
MessageBox.Show((string)url);
}, myurl);
Run Code Online (Sandbox Code Playgroud)
第二个版本是一个更多的代码,它限制你只有一个参数(所以如果你有几个你需要使用一个闭包或将所有参数放入一些容器对象)并且还键入参数object,从而迫使你将它转换为方法体中的实际内容.另一方面,优点是与关闭变量相关的开销很小,您可以避免使用此方法.请注意,在大多数情况下,这不会是一个重要的性能问题,因此除非您有其他理由,否则应该选择最方便的方法.