您的位置:首页 > 其它

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

2015-08-10 10:24 162 查看

一、进程

一个 正在运行的应用程序固定的安全边界(每个进程都有个唯一标识符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//加载到一个同步的上下文中
{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: