C# 如何解决此错误?-代表';系统行动<;对象>';不接受0个参数
以下代码:C# 如何解决此错误?-代表';系统行动<;对象>';不接受0个参数,c#,task,C#,Task,以下代码: var ui = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew(() => { listBox1.Items.Add("Starting to crawl " + srMainSiteURL + "..."); } , ui); 将导致以下错误: 委托“System.Action”不接受0个参数 在查看其他线程之后,我无法确定或理解错误的原因。请告知。您正试图拨打电话。但是,l
var ui = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => { listBox1.Items.Add("Starting to crawl " + srMainSiteURL + "..."); } , ui);
将导致以下错误:
委托“System.Action”不接受0个参数
在查看其他线程之后,我无法确定或理解错误的原因。请告知。您正试图拨打电话。但是,lambda表达式无法转换为操作
选项:
- 删除第二个参数(
),这样就可以调用所提供的lambda表达式。例如:ui
// The braces were redundant, by the way... Task.Factory.StartNew(() => listBox1.Items.Add("..."));
- 更改lambda表达式以接受参数:
Task.Factory.StartNew(state => listBox1.Items.Add("..."), ui);
这需要一个
操作
,因此您应该编写p=>{…}
,ui
是StartNew
(一个对象)的第二个参数。如果您想在调用Task.Factory.StartNew()
时指定一个任务调度程序
,您需要使用一个接受它作为参数的重载。你在呼叫过载
StartNew(Action<object> action, object state)
StartNew(动作、对象状态)
这可能不是你想要的
要将
Task.Factory.StartNew()
与调度程序一起使用,还需要指定CancellationToken
和一些TaskCreationOptions
,即调用错误的重载。如果要传递任务调度器,请使用以下命令:
Task.Factory.StartNew( () => { ... }, CancellationToken.None, TaskCreationOptions.None, ui );
因为你用过
public Task StartNew(Action<object> action, object state)
所以你的例子是:
Task.Factory.StartNew(() => { listBox1.Items.Add("Starting to crawl " + srMainSiteURL + "..."); }, CancellationToken.None, TaskCreationOptions.None, ui);
Task.Factory.StartNew(() => { listBox1.Items.Add("Starting to crawl " + srMainSiteURL + "..."); }, CancellationToken.None, TaskCreationOptions.None, ui);