• .Net Framework认知


    在托管代码的世界里,应用程序首先被加载到应用程序域(AppDomain)中,然后将应用程序域加载到进程中,一个进程可以包含多个应用程序域,也就是说一个进程可以包含多个应用程序,毕竟应用程序域之间的切换比进程间的切换要轻便。

    在应用程序域之间的数据时相互独立的,当需要在其他AppDomain当中执行当前AppDomain中的程序集代码时,可以使用CrossAppDomainDelegate委托。把CrocessAppDomainDelegate委托绑定方法以后,通过AppDomain的DoCallBack方法即可执行委托。

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("主程序域开始运行");
                //建立新的应用程序域对象
                AppDomain newAppDomain = AppDomain.CreateDomain("子程序域");
                //绑定CrossAppDomainDelegate的委托方法
                CrossAppDomainDelegate crossAppDomainDelegate = new CrossAppDomainDelegate(MyCallBack);
                //子应用程序域调用委托,相当于子程序域调用主程序域里的方法
                newAppDomain.DoCallBack(crossAppDomainDelegate);
                //绑定程序域卸载事件处理方法
                newAppDomain.DomainUnload += (obj, e) =>
                {
                    Console.WriteLine("子程序域卸载!");
                };
                //卸载子程序域
                AppDomain.Unload(newAppDomain);
    
                Console.ReadKey();
            }
    
            static public void MyCallBack()
            {
                string name = AppDomain.CurrentDomain.FriendlyName;
                for (int n = 0; n < 4; n++)
                {
                    Console.WriteLine(string.Format("当前程序运行于{0}",name));
                }
            }
        }

    一个进程可以包含多个线程,线程存在于进程当中,它在不同的时刻可以运行于多个不同的AppDomain当中。它是进程中的基本执行单元 ,在进程入口执行的第一个线程被视为这个进程的主线程。在.Net应用程序中,都是以Main()方法作为入口的,当调用此方法时,系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。

  • 相关阅读:
    DataStructure 插入排序(Insertion Sort)
    DataStructure 冒泡排序(Bubble Sort)
    Flex【原创】BitmapData高级渲染、实例展示、源码下载
    Flex 运用ProductManager重新启动Air程序
    DataStructure 按位运算方法
    Flex【原创】Air调用本地exe文件完成截图功能
    JS鼠标移动切换图片
    Jquery在线引用地址:
    css 使div垂直、水平居中
    声音播放解决方案(C#)
  • 原文地址:https://www.cnblogs.com/zhchsh/p/5283148.html
Copyright © 2020-2023  润新知