关于C#委托、事件相关的疑问

如代码所示,我有几个疑问
1、调用1与2(3与4)完全相同吗?执行委托和事件的时候会自动使用func.Invoke?
2、如下代码在WinForm窗体程序里,如果出现了跨线程访问控件,是不是都不能直接执行?
我试了一些(使用Task.Run跨线程访问)好像是都不行的?
3、BeginInvoke目前只能在Form程序中使用了吗?

        public static event Func<string, int> event_func;

        public static void Main(string[] args) {
            Func<string, int> func = Test;//使用委托
            int a = func.Invoke("5");//调用1
            int b = func("5");//调用2
            event_func += Test;//使用事件
            int c = event_func("5");//调用3
            int d = event_func.Invoke("5");//调用4
            Console.ReadLine();
        }

        public static int Test(string a) => Convert.ToInt32(a);

1.函数委托和直接调用函数肯定不是完全相同的,你是不是问效果一样?
2.跨线程访问控件直接调用是不行的,是需要委托,Task.Run是运行线程,不是委托。
3.BeginInvoke对控件的委托,不是只在Form中调用。

建议搞清楚委托是什么,为什么使用委托,刚刚学的时候都有这些疑问,弄清楚基本概念就知道了。反正我弄清楚概念了还是要吐槽下微软的设计理念。