使用和不使用Invoke的区别是什么?

时间:2017-11-24 03:22:08

标签: c# invoke

我对使用和不使用Invoke感到困惑。

在以下示例中,我认为

没有区别
int answer = b(10, 10);

int answer = b.Invoke(10, 10);

所以有人可以帮我这个吗? THX!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace TEST
{
    public delegate int BinaryOp(int x, int y);
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main innvoked on thread {0}.", Thread.CurrentThread.ManagedThreadId);
            BinaryOp b = new BinaryOp(add);
            //int answer = b(10, 10);      
            int answer = b.Invoke(10, 10); 

            Console.WriteLine("Doing more work in Main");
            Console.WriteLine("10 + 10 is {0}", answer);
            Console.Read();
        }

        static int add(int x, int y)
        {
            Console.WriteLine("add innvoked on thread {0}.", Thread.CurrentThread.ManagedThreadId);
            return x + y;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

基本上没有区别。

具体来说,因为Delegate实际上不是函数而是函数的持有者,所以保存函数的类必须有某种方式来调用它。因此方法Invoke。另一方面,当您将括号附加到Invoke时,编译器足够聪明以自动调用Delegate。请参阅https://jacksondunstan.com/articles/3283