AppDomainUnloadedException AppDomainUnloadedException AppDomainUnloadedException AppDomainUnloadedException Class

Definizione

L'eccezione generata quando si tenta di accedere a un dominio applicazione non caricato.The exception that is thrown when an attempt is made to access an unloaded application domain.

public ref class AppDomainUnloadedException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class AppDomainUnloadedException : SystemException
type AppDomainUnloadedException = class
    inherit SystemException
Public Class AppDomainUnloadedException
Inherits SystemException
Ereditarietà
AppDomainUnloadedExceptionAppDomainUnloadedExceptionAppDomainUnloadedExceptionAppDomainUnloadedException
Attributi

Esempi

In questa sezione sono riportati due esempi di codice.This section contains two code examples. Nel primo esempio illustra gli effetti di un AppDomainUnloadedException su vari thread e il secondo mostra elementary scaricare i domini applicazione.The first example demonstrates the effects of an AppDomainUnloadedException on various threads, and the second shows elementary application domain unloading.

Esempio 1Example 1

L'esempio di codice seguente definisce una TestClass classe che può essere sottoposto a marshalling attraverso i limiti del dominio dell'applicazione e un' Example classe contenente una static (Shared in Visual Basic) ThreadProc (metodo).The following code example defines a TestClass class that can be marshaled across application domain boundaries and an Example class containing a static (Shared in Visual Basic) ThreadProc method. Il ThreadProc metodo crea un dominio dell'applicazione, crea un' TestClass oggetto nel dominio e chiama un metodo di TestClass che scarica il dominio in esecuzione, causando un AppDomainUnloadedException.The ThreadProc method creates an application domain, creates a TestClass object in the domain, and calls a method of TestClass that unloads the executing domain, causing an AppDomainUnloadedException.

Il TestClass metodo viene eseguito senza la gestione delle eccezion un ThreadPool thread e da un thread ordinario, dimostra che l'eccezione non gestita termina l'attività o thread, ma non l'applicazione.The TestClass method is executed without exception handling from a ThreadPool thread and from an ordinary thread, demonstrating that the unhandled exception terminates the task or thread but not the application. Viene quindi eseguita con e senza dal thread principale dell'applicazione, dimostrando che lo termina l'applicazione se non vengono gestiti di gestione delle eccezioni.It is then executed with and without exception handling from the main application thread, demonstrating that it terminates the application if not handled.

using System;
using System.Threading;
using System.Runtime.InteropServices;

public class Example
{
    public static void Main()
    {
        // 1. Queue ThreadProc as a task for a ThreadPool thread.
        ThreadPool.QueueUserWorkItem(ThreadProc, " from a ThreadPool thread");
        Thread.Sleep(1000);

        // 2. Execute ThreadProc on an ordinary thread.
        Thread t = new Thread(ThreadProc);
        t.Start(" from an ordinary thread");
        t.Join();

        // 3. Execute ThreadProc on the main thread, with 
        //    exception handling.
        try
        {
            ThreadProc(" from the main application thread (handled)");
        }
        catch (AppDomainUnloadedException adue)
        {
            Console.WriteLine("Main thread caught AppDomainUnloadedException: {0}", adue.Message);
        }

        // 4. Execute ThreadProc on the main thread without
        //    exception handling.
        ThreadProc(" from the main application thread (unhandled)");

        Console.WriteLine("Main: This message is never displayed.");
    }

    private static void ThreadProc(object state)
    {
        // Create an application domain, and create an instance
        // of TestClass in the application domain. The first
        // parameter of CreateInstanceAndUnwrap is the name of
        // this executable. If you compile the example code using
        // any name other than "Sample.exe", you must change the
        // parameter appropriately.
        AppDomain ad = AppDomain.CreateDomain("TestDomain");
        TestClass tc = (TestClass)ad.CreateInstanceAndUnwrap("Sample", "TestClass");

        // In the new application domain, execute a method that
        // unloads the AppDomain. The unhandled exception this
        // causes ends the current thread.
        tc.UnloadCurrentDomain(state);

        Console.WriteLine("ThreadProc: This message is never displayed.");
    }
}

// TestClass derives from MarshalByRefObject, so it can be marshaled
// across application domain boundaries. 
//
public class TestClass : MarshalByRefObject
{
    public void UnloadCurrentDomain(object state)
    {
        Console.WriteLine("\nUnloading the current AppDomain{0}.", state);
 
        // Unload the current application domain. This causes
        // an AppDomainUnloadedException to be thrown.
        //
        AppDomain.Unload(AppDomain.CurrentDomain);
    }
}

/* This code example produces output similar to the following:
Unloading the current AppDomain from a ThreadPool thread.

Unloading the current AppDomain from an ordinary thread.

Unloading the current AppDomain from the main application thread (handled).
Main thread caught AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.

Unloading the current AppDomain from the main application thread (unhandled).

Unhandled Exception: System.AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
   at TestClass.UnloadCurrentDomain(Object state)
   at Example.ThreadProc(Object state)
   at Example.Main()
 */
Imports System.Threading
Imports System.Runtime.InteropServices

Public Class Example
    
    Public Shared Sub Main() 

        ' 1. Queue ThreadProc as a task for a ThreadPool thread.
        ThreadPool.QueueUserWorkItem(AddressOf ThreadProc, _
            " from a ThreadPool thread")
        Thread.Sleep(1000)
        
        ' 2. Execute ThreadProc on an ordinary thread.
        Dim t As New Thread(AddressOf ThreadProc)
        t.Start(" from an ordinary thread")
        t.Join()
        
        ' 3. Execute ThreadProc on the main thread, with 
        '    exception handling.
        Try
            ThreadProc(" from the main application thread (handled)")
        Catch adue As AppDomainUnloadedException
            Console.WriteLine("Main thread caught AppDomainUnloadedException: {0}", _
                adue.Message)
        End Try
        
        ' 4. Execute ThreadProc on the main thread without
        '    exception handling.
        ThreadProc(" from the main application thread (unhandled)")
        
        Console.WriteLine("Main: This message is never displayed.")
    
    End Sub 
    
    Private Shared Sub ThreadProc(ByVal state As Object) 
        ' Create an application domain, and create an instance
        ' of TestClass in the application domain. The first
        ' parameter of CreateInstanceAndUnwrap is the name of
        ' this executable. If you compile the example code using
        ' any name other than "Sample.exe", you must change the
        ' parameter appropriately.
        Dim ad As AppDomain = AppDomain.CreateDomain("TestDomain")
        Dim o As Object = ad.CreateInstanceAndUnwrap("Sample", "TestClass")
        Dim tc As TestClass = CType(o, TestClass)
        
        ' In the new application domain, execute a method that
        ' unloads the AppDomain. The unhandled exception this
        ' causes ends the current thread.
        tc.UnloadCurrentDomain(state)
        
        Console.WriteLine("ThreadProc: This message is never displayed.")
    
    End Sub
End Class 

' TestClass derives from MarshalByRefObject, so it can be marshaled
' across application domain boundaries. 
'
Public Class TestClass
    Inherits MarshalByRefObject
    
    Public Sub UnloadCurrentDomain(ByVal state As Object) 
        Console.WriteLine(vbLf & "Unloading the current AppDomain{0}.", state)
        
        ' Unload the current application domain. This causes
        ' an AppDomainUnloadedException to be thrown.
        '
        AppDomain.Unload(AppDomain.CurrentDomain)
    
    End Sub 
End Class 

' This code example produces output similar to the following:
'
'Unloading the current AppDomain from a ThreadPool thread.
'
'Unloading the current AppDomain from an ordinary thread.
'
'Unloading the current AppDomain from the main application thread (handled).
'Main thread caught AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
'
'Unloading the current AppDomain from the main application thread (unhandled).
'
'Unhandled Exception: System.AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
'   at TestClass.UnloadCurrentDomain(Object state)
'   at Example.ThreadProc(Object state)
'   at Example.Main()
' 

Esempio 2Example 2

Esempio di codice seguente crea e scarica un dominio applicazione e viene dimostrato che una AppDomainUnloadedException viene generata in un successivo tentativo di accedere al dominio scaricato.The following code example creates and unloads an application domain, and demonstrates that an AppDomainUnloadedException is thrown on a subsequent attempt to access the unloaded 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 'ADUnload

Commenti

In .NET Framework versione 2.0, un AppDomainUnloadedException vale a dire l'utente non gestita nel codice produce l'effetto seguente:In the .NET Framework version 2.0, an AppDomainUnloadedException that is not handled in user code has the following effect:

  • Se è stato avviato un thread in codice gestito, viene terminata.If a thread was started in managed code, it is terminated. L'eccezione non gestita non è consentita terminare l'applicazione.The unhandled exception is not allowed to terminate the application.

  • Se un'attività è in esecuzione su un ThreadPool thread, viene terminata e il thread viene restituito al pool di thread.If a task is executing on a ThreadPool thread, it is terminated and the thread is returned to the thread pool. L'eccezione non gestita non è consentita terminare l'applicazione.The unhandled exception is not allowed to terminate the application.

  • Se un thread avviato nel codice non gestito, come il thread principale dell'applicazione, viene terminata.If a thread started in unmanaged code, such as the main application thread, it is terminated. L'eccezione non gestita può continuare e il sistema operativo termina l'applicazione.The unhandled exception is allowed to proceed, and the operating system terminates the application.

AppDomainUnloadedException utilizza COR_E_APPDOMAINUNLOADED HRESULT, che ha il valore 0x80131014.AppDomainUnloadedException uses the HRESULT COR_E_APPDOMAINUNLOADED, which has the value 0x80131014.

Per un elenco di valori di proprietà iniziali per un'istanza di AppDomainUnloadedException, vedere il AppDomainUnloadedException costruttori.For a list of initial property values for an instance of AppDomainUnloadedException, see the AppDomainUnloadedException constructors.

Costruttori

AppDomainUnloadedException() AppDomainUnloadedException() AppDomainUnloadedException() AppDomainUnloadedException()

Inizializza una nuova istanza della classe AppDomainUnloadedException.Initializes a new instance of the AppDomainUnloadedException class.

AppDomainUnloadedException(SerializationInfo, StreamingContext) AppDomainUnloadedException(SerializationInfo, StreamingContext) AppDomainUnloadedException(SerializationInfo, StreamingContext) AppDomainUnloadedException(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della classe AppDomainUnloadedException con dati serializzati.Initializes a new instance of the AppDomainUnloadedException class with serialized data.

AppDomainUnloadedException(String) AppDomainUnloadedException(String) AppDomainUnloadedException(String) AppDomainUnloadedException(String)

Inizializza una nuova istanza della classe AppDomainUnloadedException con un messaggio di errore specificato.Initializes a new instance of the AppDomainUnloadedException class with a specified error message.

AppDomainUnloadedException(String, Exception) AppDomainUnloadedException(String, Exception) AppDomainUnloadedException(String, Exception) AppDomainUnloadedException(String, Exception)

Inizializza una nuova istanza della classe AppDomainUnloadedException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.Initializes a new instance of the AppDomainUnloadedException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Proprietà

Data Data Data Data

Ottiene una raccolta di coppie chiave-valore che fornisce informazioni aggiuntive definite dall'utente relative all'eccezione.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Ottiene un messaggio che descrive l'eccezione corrente.Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Ottiene il metodo che genera l'eccezione corrente.Gets the method that throws the current exception.

(Inherited from Exception)

Metodi

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

Se utilizzato come metodo di override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Quando l'override viene eseguito in una classe derivata, imposta il controllo SerializationInfo per la colonna.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType() GetType() GetType() GetType()

Ottiene il tipo di runtime dell'istanza corrente.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Crea e restituisce una rappresentazione di stringa dell'eccezione corrente.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Eventi

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Si applica a

Vedi anche