Bagikan melalui


AppDomain.Unload(AppDomain) Metode

Definisi

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

domainadalah 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 .

Berlaku untuk

Lihat juga