.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主要用于存放线程的状态信息。

posted @ 2016-03-16 13:35  zhchsh  阅读(339)  评论(0编辑  收藏  举报