如何将值传递给Task.Factory中的匿名方法

本文关键字:方法 Factory Task 值传 | 更新日期: 2023-09-27 18:12:14

我使用的是这样的结构:

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

如何将我的url传递给匿名函数?

如何将值传递给Task.Factory中的匿名方法

直接使用:

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,从而迫使你将它强制转换为它在方法体中的真实形式。另一方面,它的优点是,与关闭变量相关的开销很小,您可以避免使用这种方法。请注意,在大多数情况下,这不会是一个重要的性能问题,所以您应该使用最方便的方法,除非您有理由不这样做。