作法:卸載應用程式定義域
注意
本文專屬於 .NET Framework。 其不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
當您完成使用應用程式定義域時,請使用 AppDomain.Unload 方法將它卸載。 Unload 方法會依正常程序關閉指定的應用程式定義域。 在卸載過程中,任何新的執行緒皆不得存取應用程式定義域,且系統會將所有應用程式定義域特定的資料結構釋放出來,
並將已載入應用程式定義域的組件移除,而不再可供使用。 如果應用程式定義域中的組件為定義域中性組件,則系統會將組件的資料保留在記憶體中,直到整個程序關閉為止。 目前沒有任何機制可以卸載定義域中性的組件,因此您只能關閉整個程序。 有時候,卸載應用程式定義域的要求可能無法運作,並會導致 CannotUnloadAppDomainException。
下列範例會建立名為 MyDomain
的新應用程式定義域,再將部分資訊列印到主控台中,然後卸載應用程式定義域。 請注意,此時程式碼會嘗試將已卸載之應用程式定義域的易記名稱列印至主控台。 這個動作會產生一個例外狀況,並由程式結尾的 try/catch 陳述式進行處理。
範例
using namespace System;
using namespace System::Reflection;
ref class AppDomain2
{
public:
static void Main()
{
Console::WriteLine("Creating new AppDomain.");
AppDomain^ domain = AppDomain::CreateDomain("MyDomain", nullptr);
Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
Console::WriteLine("child domain: " + domain->FriendlyName);
AppDomain::Unload(domain);
try
{
Console::WriteLine();
Console::WriteLine("Host domain: " + AppDomain::CurrentDomain->FriendlyName);
// The following statement creates an exception because the domain no longer exists.
Console::WriteLine("child domain: " + domain->FriendlyName);
}
catch (AppDomainUnloadedException^ e)
{
Console::WriteLine(e->GetType()->FullName);
Console::WriteLine("The appdomain MyDomain does not exist.");
}
}
};
int main()
{
AppDomain2::Main();
}
using System;
using System.Reflection;
class AppDomain2
{
public static void Main()
{
Console.WriteLine("Creating new AppDomain.");
AppDomain domain = AppDomain.CreateDomain("MyDomain", null);
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("child domain: " + domain.FriendlyName);
try
{
AppDomain.Unload(domain);
Console.WriteLine();
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
// The following statement creates an exception because the domain no longer exists.
Console.WriteLine("child domain: " + domain.FriendlyName);
}
catch (AppDomainUnloadedException e)
{
Console.WriteLine(e.GetType().FullName);
Console.WriteLine("The appdomain MyDomain does not exist.");
}
}
}
Imports System.Reflection
Class AppDomain2
Public Shared Sub Main()
Console.WriteLine("Creating new AppDomain.")
Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing)
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
Console.WriteLine("child domain: " + domain.FriendlyName)
AppDomain.Unload(domain)
Try
Console.WriteLine()
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
' The following statement creates an exception because the domain no longer exists.
Console.WriteLine("child domain: " + domain.FriendlyName)
Catch e As AppDomainUnloadedException
Console.WriteLine(e.GetType().FullName)
Console.WriteLine("The appdomain MyDomain does not exist.")
End Try
End Sub
End Class