Procedure: Een toepassingsdomein laden
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
Wanneer u klaar bent met het gebruik van een toepassingsdomein, moet u het uitpakken met behulp van de AppDomain.Unload methode. Met de methode Unload wordt het opgegeven toepassingsdomein correct afgesloten. Tijdens het lossen hebben geen nieuwe threads toegang tot het toepassingsdomein en worden alle toepassingsdomeinspecifieke gegevensstructuren vrijgemaakt.
Assembly's die in het toepassingsdomein worden geladen, worden verwijderd en zijn niet meer beschikbaar. Als een assembly in het toepassingsdomein domeinneutraal is, blijven gegevens voor de assembly in het geheugen totdat het hele proces wordt afgesloten. Er is geen mechanisme om een domeinneutrale assembly te ontladen, behalve het afsluiten van het hele proces. Er zijn situaties waarin de aanvraag voor het uitladen van een toepassingsdomein niet werkt en resulteert in een CannotUnloadAppDomainException.
In het volgende voorbeeld wordt een nieuw toepassingsdomein gemaakt met de naam MyDomain
, worden enkele gegevens naar de console afgedrukt en wordt het toepassingsdomein vervolgens verwijderd. Houd er rekening mee dat de code vervolgens probeert de beschrijvende naam van het niet-geladen toepassingsdomein af te drukken op de console. Met deze actie wordt een uitzondering gegenereerd die wordt verwerkt door de try/catch-instructies aan het einde van het programma.
Voorbeeld
using namespace System;
using namespace System::Reflection;
ref class AppDomain2
{
public:
static void Main()
{
Console::WriteLine("Creating new AppDomain.");
AppDomain^ domain = AppDomain::CreateDomain("MyDomain", nullptr);
Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
Console::WriteLine("child domain: " + domain->FriendlyName);
AppDomain::Unload(domain);
try
{
Console::WriteLine();
Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
// The following statement creates an exception because the domain no longer exists.
Console::WriteLine("child domain: " + domain->FriendlyName);
}
catch (AppDomainUnloadedException^ e)
{
Console::WriteLine(e->GetType()->FullName);
Console::WriteLine("The appdomain MyDomain does not exist.");
}
}
};
int main()
{
AppDomain2::Main();
}
using System;
using System.Reflection;
class AppDomain2
{
public static void Main()
{
Console.WriteLine("Creating new AppDomain.");
AppDomain domain = AppDomain.CreateDomain("MyDomain", null);
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("child domain: " + domain.FriendlyName);
try
{
AppDomain.Unload(domain);
Console.WriteLine();
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
// The following statement creates an exception because the domain no longer exists.
Console.WriteLine("child domain: " + domain.FriendlyName);
}
catch (AppDomainUnloadedException e)
{
Console.WriteLine(e.GetType().FullName);
Console.WriteLine("The appdomain MyDomain does not exist.");
}
}
}
Imports System.Reflection
Class AppDomain2
Public Shared Sub Main()
Console.WriteLine("Creating new AppDomain.")
Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing)
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
Console.WriteLine("child domain: " + domain.FriendlyName)
AppDomain.Unload(domain)
Try
Console.WriteLine()
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
' The following statement creates an exception because the domain no longer exists.
Console.WriteLine("child domain: " + domain.FriendlyName)
Catch e As AppDomainUnloadedException
Console.WriteLine(e.GetType().FullName)
Console.WriteLine("The appdomain MyDomain does not exist.")
End Try
End Sub
End Class