ObjectDisposedException Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Eccezione generata durante l'esecuzione di un'operazione su un oggetto eliminato.
public ref class ObjectDisposedException : InvalidOperationException
public class ObjectDisposedException : InvalidOperationException
[System.Serializable]
public class ObjectDisposedException : InvalidOperationException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ObjectDisposedException : InvalidOperationException
type ObjectDisposedException = class
inherit InvalidOperationException
[<System.Serializable>]
type ObjectDisposedException = class
inherit InvalidOperationException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObjectDisposedException = class
inherit InvalidOperationException
Public Class ObjectDisposedException
Inherits InvalidOperationException
- Ereditarietà
- Ereditarietà
- Attributi
Esempio
Nell'esempio seguente viene illustrato un errore che causa la generazione dell'eccezione ObjectDisposedException
.
using namespace System;
using namespace System::IO;
int main()
{
MemoryStream^ ms = gcnew MemoryStream( 16 );
ms->Close();
try
{
ms->ReadByte();
}
catch ( ObjectDisposedException^ e )
{
Console::WriteLine( "Caught: {0}", e->Message );
}
}
using System;
using System.IO;
public class ObjectDisposedExceptionTest
{
public static void Main()
{
MemoryStream ms = new MemoryStream(16);
ms.Close();
try
{
ms.ReadByte();
}
catch (ObjectDisposedException e)
{
Console.WriteLine("Caught: {0}", e.Message);
}
}
}
open System
open System.IO
let ms = new MemoryStream 16
ms.Close()
try
ms.ReadByte()
|> ignore
with :? ObjectDisposedException as e ->
printfn $"Caught: {e.Message}"
Imports System.IO
Public Class ObjectDisposedExceptionTest
Public Shared Sub Main()
Dim ms As New MemoryStream(16)
ms.Close()
Try
ms.ReadByte()
Catch e As ObjectDisposedException
Console.WriteLine("Caught: {0}", e.Message)
End Try
End Sub
End Class
Questo codice genera l'output seguente:
Caught:
Cannot access a closed Stream.
Commenti
Viene ObjectDisposedException generata un'eccezione quando si tenta di accedere a un membro di un oggetto che implementa l'interfaccia o IAsyncDisposable l'interfaccia IDisposable e tale oggetto è stato eliminato. In genere, questa eccezione è causata da una delle condizioni seguenti:
È stato chiamato il metodo di
Dispose
unIDisposable
oggetto (o il metodo diDisposeAsync
unIDisposableAsync
oggetto) e si sta tentando di accedere a un membro dell'istanza che ottiene o imposta lo stato dell'oggetto. L'esempio seguente illustra l'eccezione ObjectDisposedException generata quando si tenta di reimpostare la frequenza delle notifiche timer dopo aver chiamato il Timer.Dispose metodo .using System; using System.Threading; public class Example { public static void Main() { Timer t = new Timer(TimerNotification, null, 100, Timeout.Infinite); Thread.Sleep(2000); t.Dispose(); t.Change(200, 1000); Thread.Sleep(3000); } private static void TimerNotification(Object obj) { Console.WriteLine("Timer event fired at {0:F}", DateTime.Now); } } // The example displays output like the following: // Timer event fired at Monday, July 14, 2014 11:54:08 AM // // Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object. // at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period) // at Example.Main()
open System open System.Threading let timerNotification _ = printfn $"Timer event fired at {DateTime.Now:F}" let t = new Timer(timerNotification, null, 100, Timeout.Infinite) Thread.Sleep 2000 t.Dispose() t.Change(200, 1000) |> ignore Thread.Sleep 3000 // The example displays output like the following: // Timer event fired at Monday, July 14, 2014 11:54:08 AM // // Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object. // at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period) // at <StartupCode$fs>.main()
Imports System.Threading Module Example Public Sub Main() Dim t As New Timer(AddressOf TimerNotification, Nothing, 100, Timeout.Infinite) Thread.Sleep(2000) t.Dispose() t.Change(200, 1000) Thread.Sleep(3000) End Sub Private Sub TimerNotification(obj As Object) Console.WriteLine("Timer event fired at {0:F}", Date.Now) End Sub End Module ' The example displays output like the following: ' Timer event fired at Monday, July 14, 2014 11:54:08 AM ' ' Unhandled Exception: System.ObjectDisposedException: Cannot access a disposed object. ' at System.Threading.TimerQueueTimer.Change(UInt32 dueTime, UInt32 period) ' at Example.Main()
È stato chiamato il metodo di
Close
un oggetto e si sta tentando di accedere a un membro dell'istanza che ottiene o imposta lo stato dell'oggetto. Spesso, ilClose
metodo fornisce l'implementazione pubblica di un tipo del IDisposable.Dispose metodo . Lo stesso vale perCloseAsync
e<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
.I metodi o
DisposeAsync
diDispose
un oggetto sono stati chiamati più volte. In genere, questo non genera un'eccezione. Tuttavia, a seconda del modo in cui un tipo implementa IDisposable.Dispose o IAsyncDisposable.DisposeAsync, potrebbe non consentire più chiamate a tale metodo.
Nella maggior parte dei casi, questa eccezione viene restituita dall'errore dello sviluppatore. Anziché gestire l'errore in un try
/catch
blocco, è consigliabile correggere l'errore, in genere reinstantindo l'oggetto.
Costruttori
ObjectDisposedException(SerializationInfo, StreamingContext) |
Inizializza una nuova istanza della classe ObjectDisposedException con dati serializzati. |
ObjectDisposedException(String) |
Consente di inizializzare una nuova istanza della classe ObjectDisposedException con una stringa contenente il nome dell'oggetto eliminato. |
ObjectDisposedException(String, Exception) |
Inizializza una nuova istanza della classe ObjectDisposedException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente. |
ObjectDisposedException(String, String) |
Consente di inizializzare una nuova istanza della classe ObjectDisposedException con il nome dell'oggetto e il messaggio specificati. |
Proprietà
Data |
Ottiene una raccolta di coppie chiave/valore che forniscono informazioni definite dall'utente aggiuntive sull'eccezione. (Ereditato da Exception) |
HelpLink |
Ottiene o imposta un collegamento al file della Guida associato all'eccezione. (Ereditato da Exception) |
HResult |
Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica. (Ereditato da Exception) |
InnerException |
Ottiene l'istanza di Exception che ha causato l'eccezione corrente. (Ereditato da Exception) |
Message |
Ottiene il messaggio nel quale è descritto l'errore. |
ObjectName |
Ottiene il nome dell'oggetto eliminato. |
Source |
Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore. (Ereditato da Exception) |
StackTrace |
Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate. (Ereditato da Exception) |
TargetSite |
Ottiene il metodo che genera l'eccezione corrente. (Ereditato da Exception) |
Metodi
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetBaseException() |
Quando ne viene eseguito l'override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive. (Ereditato da Exception) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Consente di recuperare l'oggetto SerializationInfo con il nome del parametro e informazioni aggiuntive sull'eccezione. |
GetObjectData(SerializationInfo, StreamingContext) |
Quando ne viene eseguito l'override in una classe derivata, imposta il controllo SerializationInfo con le informazioni sull'eccezione. (Ereditato da Exception) |
GetType() |
Ottiene il tipo di runtime dell'istanza corrente. (Ereditato da Exception) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ThrowIf(Boolean, Object) |
Genera un'eccezione ObjectDisposedException se l'oggetto specificato |
ThrowIf(Boolean, Type) |
Genera un'eccezione ObjectDisposedException se l'oggetto specificato |
ToString() |
Crea e restituisce una rappresentazione di stringa dell'eccezione corrente. (Ereditato da Exception) |
Eventi
SerializeObjectState |
Obsoleti.
Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione. (Ereditato da Exception) |