Description
Application domains, which are represented by AppDomain objects, provide isolation, unloading, and security boundaries for executing managed code.
Multiple application domains can run in a single process; however, there is not a one-to-one correlation between application domains and threads. Several threads can belong to a single application domain, and while a given thread is not confined to a single application domain, at any given time, a thread executes in a single application domain.
Application domains are created using the CreateDomain method. AppDomain instances are used to load and execute assemblies (System.Reflection.Assembly). When an AppDomain is no longer in use, it can be unloaded.
The AppDomain class implements a set of events to enable applications to respond to the following conditions:
Condition | Event |
|---|
An assembly was loaded. | System.AppDomain.AssemblyLoad | An application domain will be unloaded. | System.AppDomain.DomainUnload | An unhandled exception was thrown. | System.AppDomain.UnhandledException |
Example
using System;
public class AppDomainSample
{
public static void Main()
{
AppDomain domain = AppDomain.CreateDomain("MyNewDomain");
domain.AssemblyLoad +=
new AssemblyLoadEventHandler(MyLoadHandler);
Console.WriteLine("FriendlyName is '{0}'", domain.FriendlyName);
Console.WriteLine("Attempting to execute HelloWorld.exe...");
domain.ExecuteAssembly("HelloWorld.exe");
Console.WriteLine("Finished executing HelloWorld.exe.");
AppDomain.Unload(domain);
Console.WriteLine("AppDomain unloaded.");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
}
public static void MyLoadHandler(object sender,
AssemblyLoadEventArgs args)
{
Console.WriteLine("Loaded assembly {0}",
args.LoadedAssembly.FullName);
}
}
The output is
FriendlyName is 'MyNewDomain'
Attempting to execute HelloWorld.exe...
Loaded assembly HelloWorld, Version=1.0.1767.19756, Culture=neutral, PublicKeyTo
ken=null
Loaded assembly System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, Publi
cKeyToken=b77a5c561934e089
Loaded assembly System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a
5c561934e089
Loaded assembly System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyTo
ken=b03f5f7f11d50a3a
Loaded assembly System.Xml, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=
b77a5c561934e089
Finished executing HelloWorld.exe.
AppDomain unloaded.
Press Enter to continue
|