Biblioteca de clases de .NET Framework
AppDomain.Unload (Método)

Descarga el dominio de aplicación especificado.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

Sintaxis

Visual Basic (Declaración)
Public Shared Sub Unload ( _
    domain As AppDomain _
)
Visual Basic (Uso)
Dim domain As AppDomain

AppDomain.Unload(domain)
C#
public static void Unload (
    AppDomain domain
)
C++
public:
static void Unload (
    AppDomain^ domain
)
J#
public static void Unload (
    AppDomain domain
)
JScript
public static function Unload (
    domain : AppDomain
)

Parámetros

domain

Dominio de aplicación que se va a descargar.

Excepciones

Tipo de excepciónCondición

ArgumentNullException

domain es referencia de objeto null (Nothing en Visual Basic).

CannotUnloadAppDomainException

No se pudo descargar domain.

Comentarios

En la versión 2.0 de .NET Framework, hay un subproceso dedicado para descargar dominios de aplicación. Esto mejora la confiabilidad, sobre todo cuando .NET Framework se aloja en host. Cuando un subproceso llama a Unload, el dominio de destino se marca para descargarlo. El subproceso dedicado intenta descargar el dominio y todos los subprocesos del dominio se anulan. Si no se anula un subproceso (porque se esté ejecutando código no administrado o porque se esté ejecutando un bloque finally, por ejemplo), después de un período de tiempo se produce una excepción CannotUnloadAppDomainException en el subproceso que llamó a Unload en un principio. Si finalmente concluye el subproceso que no se pudo anular, el dominio de destino no se descarga. Así, en la versión 2.0 de .NET Framework, no se garantiza que se descargue domain porque quizás no sea posible finalizar los subprocesos que se estén ejecutando.

NotaNota

En algunos casos, la llamada a Unload produce una excepción CannotUnloadAppDomainException inmediata, por ejemplo, si se llama en un finalizador.

Los subprocesos en domain se finalizan utilizando el método Abort, que produce una excepción ThreadAbortException en el subproceso. Si bien el subproceso debe terminar rápidamente, podrá seguir ejecutándose durante un período de tiempo impredecible en una cláusula finally.

Compatibilidad de versiones

En las versiones 1.0 y 1.1 de .NET Framework, si el subproceso que llama a Unload se está ejecutando en domain, se inicia otro subproceso para que lleve a cabo la operación de descarga. Si no se puede descargar domain, se produce una excepción CannotUnloadAppDomainException en ese subproceso y no en el subproceso original que llamó a Unload. Sin embargo, si el subproceso que llama a Unload se está ejecutando fuera de domain, será dicho subproceso el que reciba la excepción.

Ejemplo

Visual Basic
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
C#
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.");
        }
        
    }
    
}
C++
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." );
   }

}
J#
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
Seguridad de .NET Framework

Plataformas

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

Información de versión

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0
Vea también

Etiquetas :


Page view tracker