C# 为什么它向我表明了这一点;无法从';无效';至';系统行动'&引用;

C# 为什么它向我表明了这一点;无法从';无效';至';系统行动'&引用;,c#,C#,我不知道为什么不能使用“newaction(MyMethodA).Invoke()”作为StartNew的参数 static void Main(string[] args) { Task t1 = Task.Factory.StartNew(new Action(MyMethodA).Invoke()); } 私有静态void MyMethodA() { 对于(int x=0;x

我不知道为什么不能使用“newaction(MyMethodA).Invoke()”作为StartNew的参数

    static void Main(string[] args)
    {

        Task t1 = Task.Factory.StartNew(new Action(MyMethodA).Invoke());  
    }
私有静态void MyMethodA()
{
对于(int x=0;x<100000;x++)
{
控制台写入线(“A-”+x);
}
}

尝试将代码更改为:

    private static void MyMethodA()
    {
        for (int x = 0; x < 100000; x++)
        {
            Console.WriteLine("A - " + x);
        }
    }

您的代码正在尝试使用从方法返回的内容运行任务,这是无效的。

这是因为
操作
对象上的
调用
方法将返回用于构造它的方法的类型。在您的例子中是
void
,这是因为
.Invoke()
实际上调用并执行该方法。但是
Task.Factory.StartNew
要求将
Action
作为第一个参数传递。删除
.Invoke()
将解决您的问题,这意味着您的代码如下所示:

taskt1=Task.Factory.StartNew(新操作(MyMethodA));
但是,这实际上不会启动您的
任务,因为它只会创建它。以后您需要手动运行它。或者,如果您想立即创建并运行它,请使用
Task

Task t1=Task.Run(MyMethodA)

请注意,我是如何省略了
新操作(…)
,这是因为编译器足够聪明,能够自己解决问题

您正在通过调用
Invoke()
来调用该方法。此方法将返回由
MyMethodA
指定的类型,因此无效。删除调用调用,它应该会工作感谢您回答我的问题。如果我删除Invoke(),它可以运行。但是没有打印出来。我只是发布了一个答案,包括为什么它没有打印出来,以及如何解决这个问题
Task task = Task.Run(MyMethodA);