AppDomain.Unload(AppDomain) Método

Definição

Descarrega o domínio de aplicativo 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

Um domínio de aplicativo a ser descarregado.An application domain to unload.

Exceções

domain é null.domain is null.

Não foi possível descarregar domain.domain could not be unloaded.

Ocorreu um erro durante o processo de descarregamento.An error occurred during the unload process.

Exemplos

O exemplo de código a seguir mostra como descarregar um domínio de aplicativo.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

Comentários

Na versão .NET Framework 2,0, há um thread dedicado ao descarregamento de domínios de aplicativo.In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. Isso melhora a confiabilidade, especialmente quando a .NET Framework é hospedada.This improves reliability, especially when the .NET Framework is hosted. Quando um thread chama Unload, o domínio de destino é marcado para descarregar.When a thread calls Unload, the target domain is marked for unloading. O thread dedicado tenta descarregar o domínio e todos os threads no domínio são anulados.The dedicated thread attempts to unload the domain, and all threads in the domain are aborted. Se um thread não abortar, por exemplo, porque está executando código não gerenciado ou porque está executando um bloco de finally, depois de um período de tempo, um CannotUnloadAppDomainException é lançado no thread que originalmente chamou 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. Se o thread que não pôde ser anulado eventualmente terminar, o domínio de destino não será descarregado.If the thread that could not be aborted eventually ends, the target domain is not unloaded. Portanto, no .NET Framework versão 2,0 domain não tem garantia de descarregamento, porque talvez não seja possível encerrar a execução de threads.Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.

Observação

Em alguns casos, chamar Unload causa uma CannotUnloadAppDomainExceptionimediata, por exemplo, se for chamado em um finalizador.In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

Os threads em domain são encerrados usando o método Abort, que gera uma ThreadAbortException no thread.The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. Embora o thread deva ser encerrado imediatamente, ele pode continuar sendo executado por um período imprevisível de tempo em uma cláusula de finally.Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

Compatibilidade de versõesVersion Compatibility

No .NET Framework versão 1,0 e 1,1 se o thread que chama Unload estiver em execução no domain, outro thread será iniciado para executar a operação de descarregamento.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. Se domain não puder ser descarregado, um CannotUnloadAppDomainException será gerado nesse thread, não no thread original que chamou Unload.If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. No entanto, se o thread que chama Unload estiver sendo executado fora domain, esse thread receberá a exceção.However, if the thread that calls Unload is running outside domain, that thread receives the exception.

Segurança

SecurityPermission
para adicionar um manipulador de eventos para este evento.to add an event handler for this event. Enumeração associada: ControlAppDomain.Associated enumeration: ControlAppDomain. Ação de segurança: Demand.Security action: Demand.

Aplica-se a