AppDomain.Unload(AppDomain) Méthode

Définition

Attention

Creating and unloading AppDomains is not supported and throws an exception.

Décharge le domaine d'application spécifié.

public:
 static void Unload(AppDomain ^ domain);
public static void Unload (AppDomain domain);
[System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void Unload (AppDomain domain);
static member Unload : AppDomain -> unit
[<System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)

Paramètres

domain
AppDomain

Domaine d'application à décharger.

Attributs

Exceptions

domain a la valeur null.

.NET Core et .NET 5 (et versions ultérieures) uniquement : Dans tous les cas.

-ou-

Le domain n'a pas pu être déchargé.

Une erreur s'est produite pendant le processus de déchargement.

Exemples

L’exemple de code suivant montre comment décharger un domaine d’application.

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." );
   }

}
using System;
using System.Reflection;
using System.Security.Policy;
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.");
        }
    }
}
Imports System.Reflection
Imports System.Security.Policy

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
End Class

Remarques

dans .NET Framework version 2,0 et versions ultérieures, il existe un thread dédié au déchargement des domaines d’application. cela améliore la fiabilité, en particulier lorsque .NET Framework est hébergé. Lorsqu’un thread appelle Unload , le domaine cible est marqué pour le déchargement. Le thread dédié tente de décharger le domaine, et tous les threads du domaine sont abandonnés. Si un thread ne s’arrête pas, par exemple parce qu’il exécute du code non managé, ou parce qu’il exécute un finally bloc, après un certain laps de temps, une CannotUnloadAppDomainException est levée dans le thread qui a appelé à l’origine Unload . Si le thread qui n’a pas pu être abandonné finit par se terminer, le domaine cible n’est pas déchargé. par conséquent, dans .NET Framework version 2,0 et versions ultérieures, domain le déchargement n’est pas garanti, car il n’est pas possible de mettre fin à l’exécution des threads.

Notes

Dans certains cas, l’appel de Unload provoque un immédiat CannotUnloadAppDomainException , par exemple s’il est appelé dans un finaliseur.

Les threads de domain sont terminés à l’aide de la Abort méthode, qui lève une ThreadAbortException dans le thread. Bien que le thread s’arrête rapidement, il peut continuer à s’exécuter pendant un laps de temps imprévisible dans une finally clause.

Compatibilité des versions

dans .NET Framework versions 1,0 et 1,1, si le thread qui appelle s' Unload exécute domain , un autre thread est démarré pour effectuer l’opération de déchargement. Si domain ne peut pas être déchargé, une CannotUnloadAppDomainException est levée dans ce thread, et non dans le thread d’origine qui a appelé Unload . Toutefois, si le thread qui appelle s' Unload exécute en dehors domain de, ce thread reçoit l’exception.

S’applique à

Voir aussi