ObjectDisposedException Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Исключение, которое возникает при выполнении операции с удаленным объектом.
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
- Наследование
- Наследование
- Атрибуты
Примеры
В следующем примере показано сообщение об ошибке, которая приводит ObjectDisposedException к возникновению исключения.
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
Этот код создает следующие выходные данные:
Caught:
Cannot access a closed Stream.
Комментарии
ObjectDisposedException Возникает при попытке получить доступ к элементу объекта, реализующего IDisposable интерфейс или IAsyncDisposable интерфейс, и этот объект был удален. Как правило, это исключение вызвано одним из следующих условий:
Вы вызвали
IDisposableметод объекта (илиIDisposableAsyncметод объектаDisposeDisposeAsync), и вы пытаетесь получить доступ к члену экземпляра, который получает или задает состояние объекта. В следующем примере показано, что возникает ObjectDisposedException при попытке сбросить частоту уведомлений таймера после вызова Timer.Dispose метода.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()Вы вызвали метод объекта
Close, и вы пытаетесь получить доступ к члену экземпляра, который получает или задает состояние объекта. Часто методCloseпредоставляет общедоступную реализацию IDisposable.Dispose метода типа. То же самое верно дляCloseAsyncи<xref:System.IAsyncDisposable.DisposeAsync*?displayProperty=nameWithType>.Вы несколько раз вызвали объект
DisposeилиDisposeAsyncметоды. Как правило, это не создает исключение. Однако в зависимости от способа реализации IDisposable.Dispose типа или IAsyncDisposable.DisposeAsyncможет не разрешать несколько вызовов этого метода.
В большинстве случаев это исключение приводит к ошибке разработчика. Вместо обработки ошибки в try/catch блоке следует исправлять ошибку, как правило, путем повторного создания объекта.
Конструкторы
| Имя | Описание |
|---|---|
| ObjectDisposedException(SerializationInfo, StreamingContext) |
Устаревшие..
Инициализирует новый экземпляр ObjectDisposedException класса сериализованными данными. |
| ObjectDisposedException(String, Exception) |
Инициализирует новый экземпляр ObjectDisposedException класса с указанным сообщением об ошибке и ссылкой на внутреннее исключение, которое является причиной этого исключения. |
| ObjectDisposedException(String, String) |
Инициализирует новый экземпляр ObjectDisposedException класса с указанным именем объекта и сообщением. |
| ObjectDisposedException(String) |
Инициализирует новый экземпляр ObjectDisposedException класса строкой, содержащей имя удаленного объекта. |
Свойства
| Имя | Описание |
|---|---|
| Data |
Возвращает коллекцию пар "ключ-значение", которые предоставляют дополнительные пользовательские сведения об исключении. (Унаследовано от Exception) |
| HelpLink |
Возвращает или задает ссылку на файл справки, связанный с этим исключением. (Унаследовано от Exception) |
| HResult |
Возвращает или задает HRESULT, закодированное числовое значение, назначенное определенному исключению. (Унаследовано от Exception) |
| InnerException |
Возвращает экземпляр Exception, вызвавшего текущее исключение. (Унаследовано от Exception) |
| Message |
Возвращает сообщение, описывающее ошибку. |
| ObjectName |
Возвращает имя удаленного объекта. |
| Source |
Возвращает или задает имя приложения или объекта, вызывающего ошибку. (Унаследовано от Exception) |
| StackTrace |
Возвращает строковое представление непосредственных кадров в стеке вызовов. (Унаследовано от Exception) |
| TargetSite |
Возвращает метод, который вызывает текущее исключение. (Унаследовано от Exception) |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetBaseException() |
При переопределении в производном классе возвращает Exception, которая является основной причиной одного или нескольких последующих исключений. (Унаследовано от Exception) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Устаревшие..
Извлекает SerializationInfo объект с именем параметра и дополнительными сведениями об исключении. |
| GetType() |
Возвращает тип среды выполнения текущего экземпляра. (Унаследовано от Exception) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ThrowIf(Boolean, Object) |
Создает исключение, ObjectDisposedException если указано |
| ThrowIf(Boolean, Type) |
Создает исключение, ObjectDisposedException если указано |
| ToString() |
Создает и возвращает строковое представление текущего исключения. (Унаследовано от Exception) |
События
| Имя | Описание |
|---|---|
| SerializeObjectState |
Устаревшие..
Происходит при сериализации исключения для создания объекта состояния исключения, содержащего сериализованные данные об исключении. (Унаследовано от Exception) |