AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) Method

Определение

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

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

Исключения

Свойство domain имеет значение null.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 'Main 
End Class 'ADUnload

Комментарии

В .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 выполняется блок, то по истечении определенного периода CannotUnloadAppDomainException времени в потоке, который был изначально вызван 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. Если поток, который не удалось завершить в конце концов, завершается, целевой домен не выгружается.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.

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