• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中的delegate的Invoke、BeginInvoke的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

事情是这样的,我看到了以下的一段代码,才引发了对这个问题的思考。代码如下:

 1 using UnityEngine;
 2 using UnityEditor;
 3 
 4 public class CustomInspector : Editor
 5 {
 6     protected void WrapWithValidationColor(System.Action method, bool isValid, bool isValidWarning)
 7     {
 8         Color colorBackup = GUI.color;
 9         if (isValid == false)
10         {
11             GUI.color = Color.red;
12         }
13         else if (isValidWarning == false)
14         {
15             GUI.color = Color.yellow;
16         }
17         method.Invoke();
18         GUI.color = colorBackup;
19     }
20 }

就是看到第 17 行时候,我去查了一下相关资料,引发了对这个问题的思考。

看测试代码:

 1 using System;
 2 using System.Threading;
 3 
 4 namespace CSharpTest
 5 {
 6     class Program
 7     {
 8         delegate void LugsTest();
 9 
10         static void Main(string[] args)
11         {
12             LugsTest lt = new LugsTest(ThreadSleep);
13             lt.Invoke();                        // 3s 后才打印
14             //lt.BeginInvoke(null, null);       //立即打印
15             Console.WriteLine("LugsTest()");
16             Console.ReadKey();
17         }
18 
19         static void ThreadSleep()
20         {
21             Thread.Sleep(3000);
22         }
23     }
24 }

具体的执行结果,注释中写有,而两者的区别就是:

Invoke 是在主线程中执行,BeginInvoke 是另开一个线程执行。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap