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

ArgumentNullException

domain ist NULL (Nothing in Visual Basic).

CannotUnloadAppDomainException

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

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

Siehe auch

Referenz

AppDomain-Klasse
AppDomain-Member
System-Namespace