AppDomain.Unload-Methode
Entlädt die angegebene Anwendungsdomäne.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Shared Sub Unload ( _
domain As AppDomain _
)
'Usage
Dim domain As AppDomain
AppDomain.Unload(domain)
public static void Unload (
AppDomain domain
)
public:
static void Unload (
AppDomain^ domain
)
public static void Unload (
AppDomain domain
)
public static function Unload (
domain : AppDomain
)
Parameter
- domain
Eine zu entladende Anwendungsdomäne.
Ausnahmen
Ausnahmetyp | Bedingung |
---|---|
domain ist NULL (Nothing in Visual Basic). |
|
domain konnte nicht entladen werden. |
Hinweise
In .NET Framework, Version 2.0, ist ein eigener Thread für das Entladen von Anwendungsdomänen vorhanden. Dies verbessert die Zuverlässigkeit, insbesondere wenn .NET Framework gehostet wird. Wenn ein Thread Unload aufruft, wird die Zieldomäne für die Entladung gekennzeichnet. Der allein zuständige Thread versucht, die Domäne zu entladen, und alle Threads in der Domäne werden beendet. Wenn ein Thread nicht beendet werden kann, z. B. weil er nicht verwalteten Code oder einen finally-Block ausführt, wird nach gewisser Zeit eine CannotUnloadAppDomainException in dem Thread ausgelöst, der Unload ursprünglich aufgerufen hat. Wenn der Thread, der zunächst nicht beendet werden konnte, schließlich beendet wird, wird die Zieldomäne nicht entladen. Daher wird in .NET Framework, Version 2.0, nicht sichergestellt, dass domain entladen wird, da ausgeführte Threads möglicherweise nicht beendet werden können.
Hinweis
In einigen Fällen löst das Aufrufen von Unload sofort eine CannotUnloadAppDomainException aus, z. B. wenn der Aufruf in einem Finalizer erfolgt.
Die Threads in domain werden mit der Abort-Methode beendet, die im Thread eine ThreadAbortException auslöst. Obwohl der Thread umgehend beendet werden müsste, kann er unvorhersehbar lange in einer finally-Klausel verweilen.
Versionskompatibilität
Wenn in .NET Framework, Version 1.0 und 1.1, der Unload aufrufende Thread in domain ausgeführt wird, wird zum Ausführen des Entladevorgangs ein anderer Thread gestartet. Wenn domain nicht entladen werden kann, wird in diesem Thread eine CannotUnloadAppDomainException ausgelöst und nicht in dem Thread, der Unload ursprünglich aufgerufen hat. Wenn der Thread, der Unload aufgerufen hat, jedoch außerhalb der domain ausgeführt wird, wird die Ausnahme in diesem Thread ausgelöst.
Beispiel
Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object
Class ADUnload
Public Shared Sub Main()
'Create evidence for the new appdomain.
Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
' Create the new application domain.
Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence)
Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
Console.WriteLine(("child domain: " + domain.FriendlyName))
' Unload the application domain.
AppDomain.Unload(domain)
Try
Console.WriteLine()
' Note that the following statement creates an exception because the domain no longer exists.
Console.WriteLine(("child domain: " + domain.FriendlyName))
Catch e As AppDomainUnloadedException
Console.WriteLine("The appdomain MyDomain does not exist.")
End Try
End Sub 'Main
End Class 'ADUnload
using System;
using System.Reflection;
using System.Security.Policy; //for evidence object
class ADUnload
{
public static void Main()
{
//Create evidence for the new appdomain.
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
// Create the new application domain.
AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence);
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("child domain: " + domain.FriendlyName);
// Unload the application domain.
AppDomain.Unload(domain);
try
{
Console.WriteLine();
// Note that the following statement creates an exception because the domain no longer exists.
Console.WriteLine("child domain: " + domain.FriendlyName);
}
catch (AppDomainUnloadedException e)
{
Console.WriteLine("The appdomain MyDomain does not exist.");
}
}
}
using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;
//for evidence Object*
int main()
{
//Create evidence for the new appdomain.
Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;
// Create the new application domain.
AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence );
Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
Console::WriteLine( "child domain: {0}", domain->FriendlyName );
// Unload the application domain.
AppDomain::Unload( domain );
try
{
Console::WriteLine();
// Note that the following statement creates an exception because the domain no longer exists.
Console::WriteLine( "child domain: {0}", domain->FriendlyName );
}
catch ( AppDomainUnloadedException^ /*e*/ )
{
Console::WriteLine( "The appdomain MyDomain does not exist." );
}
}
import System.*;
import System.Reflection.*;
import System.Security.Policy.*; //for evidence object
class ADUnload
{
public static void main(String[] args)
{
// Create evidence for the new appdomain.
Evidence adEvidence = AppDomain.get_CurrentDomain().get_Evidence();
// Create the new application domain.
AppDomain domain = AppDomain.CreateDomain("MyDomain", adEvidence);
Console.WriteLine("Host domain: "
+ AppDomain.get_CurrentDomain().get_FriendlyName());
Console.WriteLine("child domain: " + domain.get_FriendlyName());
// Unload the application domain.
AppDomain.Unload(domain);
try {
Console.WriteLine();
// Note that the following statement creates an exception
// because the domain no longer exists.
Console.WriteLine("child domain: " + domain.get_FriendlyName());
}
catch (AppDomainUnloadedException e) {
Console.WriteLine("The appdomain MyDomain does not exist.");
}
} //main
} //ADUnload
.NET Framework-Sicherheit
- SecurityPermission zum Hinzufügen eines Ereignishandlers für dieses Ereignis. Zugeordnete Enumeration: SecurityPermissionFlag.ControlAppDomain.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0