AppDomain.Unload(AppDomain) Método

Definición

Descarga el dominio de aplicación especificado.Unloads the specified application domain.

public:
 static void Unload(AppDomain ^ domain);
public static void Unload (AppDomain domain);
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)

Parámetros

domain
AppDomain

Dominio de aplicación que se va a descargar.An application domain to unload.

Excepciones

domain es null.domain is null.

No se pudo descargar domain.domain could not be unloaded.

Error durante el proceso de descarga.An error occurred during the unload process.

Ejemplos

En el ejemplo de código siguiente se muestra cómo descargar un dominio de aplicación.The following code example shows how to unload an application domain.

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

Comentarios

En la versión .NET Framework 2,0 hay un subproceso dedicado para descargar dominios de aplicación.In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. Esto mejora la confiabilidad, especialmente cuando se hospeda el .NET Framework.This improves reliability, especially when the .NET Framework is hosted. Cuando un subproceso llama Unload, el dominio de destino está marcado para descargarse.When a thread calls Unload, the target domain is marked for unloading. El subproceso dedicado intenta descargar el dominio y se anulan todos los subprocesos del dominio.The dedicated thread attempts to unload the domain, and all threads in the domain are aborted. Si un subproceso no se anula, por ejemplo porque está ejecutando código no administrado o porque está ejecutando un bloque finally, después de un período de tiempo se produce una CannotUnloadAppDomainException en el subproceso que originalmente llamó a Unload.If a thread does not abort, for example because it is executing unmanaged code, or because it is executing a finally block, then after a period of time a CannotUnloadAppDomainException is thrown in the thread that originally called Unload. Si el subproceso que no se pudo anular acaba, el dominio de destino no se descarga.If the thread that could not be aborted eventually ends, the target domain is not unloaded. Por lo tanto, en el .NET Framework versión 2,0 domain no se garantiza que se descargue, ya que es posible que no sea posible terminar la ejecución de subprocesos.Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.

Nota

En algunos casos, la llamada a Unload produce una CannotUnloadAppDomainExceptioninmediata, por ejemplo, si se llama en un finalizador.In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

Los subprocesos de domain se terminan mediante el método Abort, que produce una ThreadAbortException en el subproceso.The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. Aunque el subproceso debe finalizar rápidamente, puede seguir ejecutándose durante una cantidad de tiempo imprevisible en una cláusula de finally.Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

Compatibilidad de versionesVersion Compatibility

En la .NET Framework versión 1,0 y 1,1 si el subproceso que llama a Unload se está ejecutando en domain, se inicia otro subproceso para realizar la operación de descarga.In the .NET Framework version 1.0 and 1.1 if the thread that calls Unload is running in domain, another thread is started to perform the unload operation. Si no se puede descargar domain, se produce una CannotUnloadAppDomainException en ese subproceso, no en el subproceso original que llamó a Unload.If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. Sin embargo, si el subproceso que llama a Unload se está ejecutando fuera de domain, ese subproceso recibe la excepción.However, if the thread that calls Unload is running outside domain, that thread receives the exception.

Seguridad

SecurityPermission
para agregar un controlador de eventos para este evento.to add an event handler for this event. Enumeración asociada: ControlAppDomain.Associated enumeration: ControlAppDomain. Acción de seguridad: Demand.Security action: Demand.

Se aplica a