如代码所示,我有几个疑问
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中调用。
建议搞清楚委托是什么,为什么使用委托,刚刚学的时候都有这些疑问,弄清楚基本概念就知道了。反正我弄清楚概念了还是要吐槽下微软的设计理念。