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

标签 c# parameters parameter-passing task anonymous-function

我正在使用这样的结构:

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

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

最佳答案

直接使用即可:

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,从而迫使您将其转换为方法主体中的实际内容。另一方面,优点是与关闭变量相关的开销很小,您可以使用此方法避免这些变量。请注意,在大多数情况下,这不会成为重要的性能问题,因此您应该选择最方便的方法,除非您有理由不这样做。

关于c# - 如何将值传递给 Task.Factory 中的匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363971/

相关文章:

c# - RedirectToAction 在页面中显示 404,但仍会重定向

c# - 使用 Webbrowser 控件在网站中自动登录表单

amazon-web-services - 使用替换的顶级参数的类型

javascript - 用函数修改全局变量?

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

mysql - 如何将输入的参数值与存储过程mysql中的变量进行比较?

c# - 使用 VS 2017 镜像,无法在具有一个 .NET Core 3 项目的解决方案中构建其​​他项目

c# - 如何根据两个坐标计算角度?

Javascript - 传递包含变量的 html 字符串作为参数

ruby - Ruby/Sinatra 中的作用域