我可是森森呢 2022-08-21 02:17 采纳率: 96.3%
浏览 31
已结题

关于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条回答 默认 最新

  • much0726 2022-08-24 15:21
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据