Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决此错误?-代表';系统行动<;对象>';不接受0个参数_C#_Task - Fatal编程技术网

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表达式无法转换为
操作

选项:

  • 删除第二个参数(
    ui
    ),这样就可以调用所提供的lambda表达式。例如:

    // 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);