zoukankan      html  css  js  c++  java
  • .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主要用于存放线程的状态信息。

  • 相关阅读:
    Ubuntu – vlan & bridge configuration
    Python 腾讯云宝塔面板 B站获取经验脚本 部署 自动发邮件
    struts1的总结
    在oracle 中自己所做的作业。。
    昨天上课学到的东西
    今天关于一些学习了国际化的知识
    学习的第二个框架hibernate
    我学习struts的一些心得!
    hibernate的几种状态的详解
    关于hibernate的,另外一些应用!
  • 原文地址:https://www.cnblogs.com/zhchsh/p/5283148.html
Copyright © 2011-2022 走看看