AppDomain.Unload(AppDomain) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Perhatian
Creating and unloading AppDomains is not supported and throws an exception.
Membongkar domain aplikasi yang ditentukan.
public:
static void Unload(AppDomain ^ domain);
public static void Unload (AppDomain domain);
[System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void Unload (AppDomain domain);
static member Unload : AppDomain -> unit
[<System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)
Parameter
- domain
- AppDomain
Domain aplikasi untuk dibongkar.
- Atribut
Pengecualian
domain
adalah null
.
Hanya .NET Core dan .NET 5+: Dalam semua kasus.
-atau-
domain
tidak dapat dibongkar.
Terjadi kesalahan selama proses bongkar muat.
Contoh
Contoh kode berikut menunjukkan cara membongkar domain aplikasi.
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.");
}
}
}
open System
//Create evidence for the new appdomain.
let adevidence = AppDomain.CurrentDomain.Evidence
// Create the new application domain.
let domain = AppDomain.CreateDomain("MyDomain", adevidence)
printfn $"Host domain: {AppDomain.CurrentDomain.FriendlyName}"
printfn $"child domain: {domain.FriendlyName}"
// Unload the application domain.
AppDomain.Unload domain
try
printfn ""
// Note that the following statement creates an exception because the domain no longer exists.
printfn $"child domain: {domain.FriendlyName}"
with :? AppDomainUnloadedException ->
printfn "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
Keterangan
Dalam .NET Framework versi 2.0 dan yang lebih baru, ada utas yang didedikasikan untuk membongkar domain aplikasi. Ini meningkatkan keandalan, terutama ketika .NET Framework dihosting. Saat utas Unloadmemanggil , domain target ditandai untuk dibongkar. Utas khusus mencoba untuk membongkar domain, dan semua utas di domain dibatalkan. Jika utas tidak membatalkan, misalnya karena menjalankan kode yang tidak dikelola, atau karena menjalankan finally
blok, maka setelah jangka waktu tertentu, CannotUnloadAppDomainException dilemparkan ke utas yang awalnya disebut Unload. Jika utas yang tidak dapat dibatalkan akhirnya berakhir, domain target tidak dibongkar. Dengan demikian, dalam .NET Framework versi 2.0 dan yang lebih baru, domain
tidak dijamin untuk membongkar, karena mungkin tidak mungkin untuk mengakhiri eksekusi utas.
Catatan
Dalam beberapa kasus, panggilan Unload menyebabkan segera CannotUnloadAppDomainException, misalnya jika dipanggil dalam finalizer.
Utas di dihentikan domain
menggunakan Abort metode , yang melemparkan di utas ThreadAbortException . Meskipun utas harus segera berakhir, utas dapat terus dieksekusi untuk jumlah waktu yang tidak dapat diprediksi dalam klausul finally
.