ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)...
閱讀目錄
一:應用程序域概述
二:應用程序域和線程的關系
三:線程跨越多個應用程序域實例
四:運行效果
一:應用程序域
. 在.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下的多线程编程应用程序域(七)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: App Hub上传应用的状态说明
- 下一篇: ASP.NET MVC的生命周期与网址路