AppDomain.Unload(AppDomain) Метод

Определение

Выгружает заданный домен приложения.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)

Параметры

domain
AppDomain

Домен приложения, который нужно выгрузить.An application domain to unload.

Исключения

domainnull.domain is null.

Домен, определенный параметром domain, не может быть выгружен.domain could not be unloaded.

Во время выполнения выгрузки произошла ошибка.An error occurred during the unload process.

Примеры

В следующем примере кода показано, как выгрузить домен приложения.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

Комментарии

В .NET Framework версии 2,0 существует поток, предназначенный для выгрузки доменов приложений.In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. Это повышает надежность, особенно при размещении .NET Framework.This improves reliability, especially when the .NET Framework is hosted. Когда поток вызывает Unload, целевой домен помечается для выгрузки.When a thread calls Unload, the target domain is marked for unloading. Выделенный поток пытается выгрузить домен, и все потоки в этом домене будут прерваны.The dedicated thread attempts to unload the domain, and all threads in the domain are aborted. Если поток не прерывается, например, так как он выполняет неуправляемый код или выполняется блок finally, то по истечении некоторого времени в потоке, вызвавшем Unload, будет создано CannotUnloadAppDomainException.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. Если поток, который не удалось завершить в конце концов, завершается, целевой домен не выгружается.If the thread that could not be aborted eventually ends, the target domain is not unloaded. Поэтому в .NET Framework версии 2,0 domain не гарантируется выгрузка, так как это может привести к невозможности завершения выполняющихся потоков.Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.

Примечание

В некоторых случаях вызов Unload вызывает немедленный CannotUnloadAppDomainException, например, если он вызывается методом завершения.In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

Потоки в domain завершаются с помощью метода Abort, который создает в потоке ThreadAbortException.The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. Хотя поток должен завершаться немедленно, он может продолжать выполнение в течение непредсказуемого времени в предложении finally.Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

Совместимость версийVersion Compatibility

В .NET Framework версии 1,0 и 1,1, если поток, вызывающий Unload, выполняется в domain, для выполнения операции выгрузки запускается другой поток.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. Если не удается выгрузить domain, в этом потоке создается CannotUnloadAppDomainException, а не в исходный поток, вызвавший Unload.If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. Однако если поток, вызывающий Unload, работает вне domain, этот поток получает исключение.However, if the thread that calls Unload is running outside domain, that thread receives the exception.

Безопасность

SecurityPermission
для добавления обработчика событий для этого события.to add an event handler for this event. Связанное перечисление: ControlAppDomain.Associated enumeration: ControlAppDomain. Действие безопасности: Demand.Security action: Demand.

Применяется к