第16章 进程、应用程序域和对象上下文

来源:互联网 发布:亚马逊读书软件 编辑:程序博客网 时间:2024/06/04 19:22

一、进程

一个 正在运行的应用程序固定的安全边界(每个进程都有个唯一标识符PID)

System.Diagnostics.Process



1、列举运行中的进程

            //System.Diagnostics.Process 类型的数组,它表示指定计算机上运行的所有进程资源            var runingProcess = from proc in Process.GetProcesses(".")                                orderby proc.Id                                select proc;            foreach (var p in runingProcess)            {                Console.WriteLine("进程id={0},进程名={1}.",p.Id,p.ProcessName);            }

2、获得指定进程

            Process theProc = Process.GetProcessById(1524);            Console.WriteLine("进程id={0},进程名={1}.",theProc.Id,theProc.ProcessName);


3、获得进程的线程集合

            Process theProc = Process.GetProcessById(1524);            ProcessThreadCollection theThreads = theProc.Threads;//获得进程中运行的一组线程            foreach(ProcessThread pt in theThreads)            {                Console.WriteLine("线程ID={0},开始时间={1},优先级={2}",pt.Id,pt.StartTime.ToShortDateString(),pt.PriorityLevel);            }

4、进程中模块集合

            Process theProc = Process.GetProcessById(1524);            ProcessModuleCollection theMods = theProc.Modules;//获得进程中的*dll或.exe本身            foreach (ProcessModule pm in theMods)            {                Console.WriteLine("进程中的模块名={0}",pm.ModuleName);            }

5、编程方式 启动或结束进程
            Process ieProc = null;            try            {                ieProc = Process.Start("IExplore.exe","www.xx.com");//启动IE进程            }            catch(InvalidOperationException ex)            {                Console.WriteLine(ex.Message);            }            Console.Write("按回车杀死进程:{0}",ieProc.ProcessName);            Console.ReadLine();            try            {                ieProc.Kill();//杀死进程            }            catch (InvalidOperationException ex)            {                Console.WriteLine(ex.Message);            }


二、.NET 可执行程序 承载在 应用程序域(进程的逻辑分区)

System.AppDomain


1、与默认应用程序域进行交互

            //访问当前线程的应用程序域            AppDomain defaultAD = AppDomain.CurrentDomain;            Console.WriteLine("应用程序域名称:{0}",defaultAD.FriendlyName);            Console.WriteLine("应用程序域 ID:{0}",defaultAD.Id);            Console.WriteLine("是否是默认应用程序域:{0}",defaultAD.IsDefaultAppDomain());            Console.WriteLine("应用程序域路径:{0}",defaultAD.BaseDirectory);            Console.ReadLine();

效果:


2、枚举加载程序集

            //访问当前线程的应用程序域            AppDomain defaultAD = AppDomain.CurrentDomain;            Assembly[] loadedAssemblies = defaultAD.GetAssemblies();//应用程序域中加载的程序集            foreach(Assembly a in loadedAssemblies)            {                Console.WriteLine("程序集名:{0},版本:{1}",a.GetName().Name,a.GetName().Version);            }            Console.ReadLine();

3、加载程序集时,发生

            //访问当前线程的应用程序域            AppDomain defaultAD = AppDomain.CurrentDomain;            defaultAD.AssemblyLoad += (o, s) =>                {                    Console.WriteLine(s.LoadedAssembly.GetName().Name);//程序集简单名                };            Console.ReadLine();

4、创建新的应用程序域

AppDomain newAd = AppDomain.CreateDomain("secondappdomain");


5、自定义应用程序域中加载程序集

     

newAd.Load("CarLibrary");//将CarLibrary.dll加载到新域中


6. 卸载应用程序域

   

AppDomain.Unload(newAd);

三、上下文边界

1、定义上下文绑定对象

    //自动线程安全类 SportsCarTS    [Synchronization]    class SportsCarTS : ContextBoundObject//加载到一个同步的上下文中    {         }



0 0
原创粉丝点击