阅读目录

  一:应用程序域概述

  二:应用程序域和线程的关系

  三:线程跨越多个应用程序域实例

  四:运行效果

  一:应用程序域

  . 在.NET中有个特点,在.NET中有个CLR,在操作系统和我们编程环境之间有个CLR,操作系统和CLR之间有种隔离,操作系统和运行库会在应用程序间提供某种隔离,为了确保一个应用程序的代码不会对其他不相关的应用程序产生影响,这种隔离是必须的

  . .NET中新增了一个隔离层称为应用程序域,它是进程内部一个逻辑独立的部分,也就是说两个进程之间为了让它们不产生一些安全性的问题,一个应用程序出现错误,不会影响其他的应用程序,举个例子:在Windows下经常有某个应用程序出错了,会弹出一个框问是否要调试,在任务栏下把出错的这个应用程序关闭就行了,说明两个进程之间它们互相是不关联的,是因为它们之间有应用程序域的原因

  . 公共语言运行库可以使用应用程序域来提供应用程序间的隔离

  . 应用程序域可以理解为我的地盘我做主,比如:只有一个道路的话,里面跑着大货车,私家车,行人,那么大货车出事故了是不必会影响到私家车和行人,同样它们三个中任何一个出现问题都会影响到其它的两个,因为它们在一个道路里面,那么现在假设有三个车道,快车道跑大货车的,慢车道跑私家小型车的,人行道走人的,如果大货车出现事故了,是不就不会不影响到私家车和行人,那么大货车在自己的道路里是不想怎么开就怎么开,倒着开都没事,私家车和行人同理,因为它们是在三个不同的道路里,这里三个车道相当于应用程序域,大货车和私家车以及行人相当于三个进程

  . 使用应用程序域
  -能够在不停止整个进程的情况下,停止某一个应用程序,一个进程中包含好多应用程序,可以把某个应用程序停止,不影响其他的应用程序
  -在一个应用程序中的代码不能访问直接访问另外一个应用程序中的代码或资源
  -代码的行为范围由它所运行的所在应用程序决定
  -向代码授予权限可以由代码运行所在的应用程序域来决定

  

  二:应用程序域和线程的关系

  . 在运行时,所有的托管代码被加载到一个应用程序域当中,由特定的操作系统线程来运行的

  . 应用程序域和线程之间不是一一对应的,也就是说,一个应用程序域可以执行多个线程,一个线程可以跨越多个应用程序域,但是在某个时间点上,某个线程还是在一个应用程序域当中的

  . 通过调用Thread.GetDomain方法,可以确定线程执行所在的域

   三:线程跨越多个应用程序域实例

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading;

  namespace AppDomainAndThread
  {
      class Program
      {
          static void Main(string[] args)
          {
                //创建一个应用程序域
               AppDomain appdomain = AppDomain.CreateDomain("MyAppDomain");
                appdomain.SetData("DomainKey", "DomainValue");
                CommonMethod();
                //CrossAppDomainDelegate它是个委托,这个委托的作用是跨应用程序域调用的,
               CrossAppDomainDelegate mydelegate = new CrossAppDomainDelegate(CommonMethod);
                //AppDomain的DoCallBack方法用于跨越应用程序调用,在另外一个应用程序域中执行代码也就是我们的输出内容
                appdomain.DoCallBack(mydelegate);
                Console.ReadKey();
        }

/// <summary>
        /// 两个应用程序域都要调用的方法
        /// </summary>
        private static void CommonMethod()
        {
            //获得当前的应用程序域
            AppDomain appdomain = AppDomain.CurrentDomain;
            Console.WriteLine("应用程序域它的值是:'" + appdomain.GetData("DomainKey") + "' 在'" + appdomain.FriendlyName.ToString() + "'中找到的,运行的线程ID是:'" + AppDomain.GetCurrentThreadId().ToString() + "'");
        }
    }
}

   四:运行效果

  我们发现两个应用程序域分别是“AppDomainAndThread.vshost.exe”和“MyAppDomain”,它们两个的ThreadID是一样的都是5832,在两个应用程序域执行的是同一个线程

  

  

  

转载于:https://www.cnblogs.com/menglin2010/archive/2012/03/25/2413566.html

ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)...相关推荐

  1. ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)

    阅读目录 一:同步处理 二:异步处理 三:异步委托 四:通过委托同步调用方法 五:通过委托异步调用方法 一:同步处理 一个同步操作会阻塞整个当前的进程,直到这个操作完成才能执行下一段代码 二:异步处理 ...

  2. asp.net ajax学习系列功能强大的UpdatePanel控件

    先给一个简单的例子,后面给一个比较复杂的例子. 改进后的UpdatePanel使页面部分更新(Partial-Page Updates)实现起来非常容易. 要想在已有web页面或新建页面中加入部分更新 ...

  3. ASP.NET MVC学习系列(一)-WebAPI初探

    由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...

  4. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs

    现在mvc采用了ModelBinder, Controller中现在可以接受很多复杂类型的参数,但是对于jquery,extjs等js框架来说,更多的是采用json格式与服务器端传递参数更合理.对于简 ...

  5. ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程

    原文链接:http://www.cnblogs.com/Terrylee/archive/2006/11/12/ASPNET_AJAX_UpdateProgress_Part2.html 在本篇文章中 ...

  6. C#温故而知新学习系列之面向对象编程—构造函数(七)

    构造函数 构造函数又叫构造方法,其实就是对类进行初始化,构造函数与类同名,无返回值,也不需要void,在new时候调用 所有的类都有构造函数,如果你不写构造函数的话,系统默认生成空的构造函数,若你有自 ...

  7. C#温故而知新学习系列之.NET框架高级特性—概述.NET框架中的反射(一)

    阅读目录 一:什么是元数据? 二:概述.NET框架中的反射 一:什么是元数据? 元数据,就是描述数据的数据,它存储在PE文件中,PE文件由IL Code和元数据组成,元数据为.NET提供了丰富的自我描 ...

  8. C#温故而知新学习系列之XML编程—Xml写入器XmlWriter类(三)

    前言 与XmlReader类相对应,.NETFramework也提供了一个以快速的,非缓存的,只向前的,动态写入XML数据的类即XmlWriter类,可以将XmlWriter类理解为与XmlReade ...

  9. C#温故而知新学习系列之面向对象编程—readonly关键字(十七)

    readonly关键字 表示只读的意思,与const不同,readonly关键字只能用于字段,不能用于局部变量,也就是说要使用readonly修饰一个字段或者变量的时候,必须将它声明在类中或者全局变量 ...

最新文章

  1. javascript之模拟call以及apply实现
  2. 【网络安全】如何利用工具发现内部或外部网络攻击面
  3. SharpMap分析手记
  4. 数据库原理与应用(SQL Server)笔记 第一章 数据定义语言和数据操纵语言
  5. 使用Redis set 解决数据的唯一性问题
  6. Java 8新特性探究(二)深入解析默认方法
  7. windows 10打开或禁用管理员账户
  8. 导致自然语言理解的困难的主要因素是什么?
  9. Bootstrap页面布局17 - BS选项卡
  10. Cookie、Session、Token、JWT分别是什么(四)
  11. 7805急剧发热,可能是什么原因?
  12. 现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售
  13. FPGA实现VGA显示(二)——————color_bar显示及方框移动(参考开拓者FPGA开发指南)
  14. RMQ----不更新点
  15. meetsurprise告诉你手镯的戴法
  16. 苹果x屏幕黑有包白苹果_苹果捆绑包的关键
  17. FOFA是什么(白帽汇推出的一款网络空间资产搜索引擎)
  18. 长微博图片制作(无水印)
  19. 如何从初级程序员顺利晋升到高级程序员?
  20. FXO端口的断开呼叫的问题(转)

热门文章

  1. 字符串的方法、注释及示例1.
  2. Elastic Job入门(1) - 简介
  3. spring bean的作用域和生命周期
  4. PhpStorm 对 AngularJS 的支持
  5. 函数指针声明时的形参列表可以没有
  6. 问:关于上升沿和下降沿触发的讨论
  7. SQL2005使用游标的实例(SBO中计算到期应收账款)
  8. 浅谈对BFC的认识,以及用bfc解决浮动问题
  9. GoLang-Beego使用
  10. Tensorflow实战系列之五: