【发布时间】:2013-05-03 16:50:41
【问题描述】:
我正在使用这样的构造:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
如何将myurl传递给匿名函数?
【问题讨论】:
标签: c# parameters parameter-passing task anonymous-function
我正在使用这样的构造:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
如何将myurl传递给匿名函数?
【问题讨论】:
标签: c# parameters parameter-passing task anonymous-function
直接使用即可:
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);
第二个版本的代码有点多,它限制你只能使用一个参数(所以如果你有多个参数,你需要使用闭包或将所有参数放入某个容器对象中)并且还将参数键入到 @ 987654324@,从而迫使您将其转换为方法体中的真实内容。另一方面,优点是与关闭变量相关的开销很小,使用此方法可能会避免这些开销。请注意,在大多数情况下,这不会是一个重要的性能问题,因此您应该选择最方便的方法,除非您有理由不这样做。
【讨论】:
StartNew 之前从控件中获取数据,即如果您希望文本框的文本不要关闭在文本框上获取文本,获取文本并将其存储在字符串变量中,然后调用StartNew 并关闭该字符串。