ObjectDisposedException 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
삭제된 개체에서 연산이 수행될 때 throw되는 예외입니다.
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
- 상속
- 상속
- 특성
예제
다음 예제에서는 예외가 throw되는 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
이 코드의 결과는 다음과 같습니다.
Caught:
Cannot access a closed Stream.
설명
ObjectDisposedException 인터페이스 또는 IAsyncDisposable 인터페이스를 구현 IDisposable 하는 개체의 멤버에 액세스하려고 하면 해당 개체가 삭제된 경우 throw됩니다. 일반적으로 이 예외는 다음 조건 중 하나로 인해 발생합니다.
개체의
Dispose
메서드(또는IDisposableAsync
개체의DisposeAsync
메서드)를 호출IDisposable
했고 개체의 상태를 가져오거나 설정하는 인스턴스 멤버에 액세스하려고 합니다. 다음 예제에서는 메서드를 ObjectDisposedException 호출 Timer.Dispose 한 후 타이머 알림의 빈도를 다시 설정하려고 할 때 throw되는 것을 보여 줍니다.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%2A?displayProperty=nameWithType>
입니다.개체
Dispose
또는DisposeAsync
메서드를 여러 번 호출했습니다. 일반적으로 예외는 throw하지 않습니다. 그러나 형식이 구현 IDisposable.Dispose 하는 IAsyncDisposable.DisposeAsync방법에 따라 해당 메서드에 대한 여러 호출을 허용하지 않을 수 있습니다.
대부분의 경우 이 예외는 개발자 오류로 인해 발생합니다. 블록에서 try
/catch
오류를 처리하는 대신 일반적으로 개체를 다시 설치하여 오류를 수정해야 합니다.
생성자
ObjectDisposedException(SerializationInfo, StreamingContext) |
serialize된 데이터를 사용하여 ObjectDisposedException 클래스의 새 인스턴스를 초기화합니다. |
ObjectDisposedException(String) |
삭제된 개체의 이름이 들어 있는 문자열을 사용하여 ObjectDisposedException 클래스의 새 인스턴스를 초기화합니다. |
ObjectDisposedException(String, Exception) |
지정된 오류 메시지와 해당 예외의 원인인 내부 예외에 대한 참조를 사용하여 ObjectDisposedException 클래스의 새 인스턴스를 초기화합니다. |
ObjectDisposedException(String, String) |
지정된 개체 이름과 메시지를 사용하여 ObjectDisposedException 클래스의 새 인스턴스를 초기화합니다. |
속성
Data |
예외에 대한 사용자 정의 정보를 추가로 제공하는 키/값 쌍 컬렉션을 가져옵니다. (다음에서 상속됨 Exception) |
HelpLink |
이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다. (다음에서 상속됨 Exception) |
HResult |
특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다. (다음에서 상속됨 Exception) |
InnerException |
현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다. (다음에서 상속됨 Exception) |
Message |
오류를 설명하는 메시지를 가져옵니다. |
ObjectName |
삭제된 개체의 이름을 가져옵니다. |
Source |
오류를 발생시키는 애플리케이션 또는 개체의 이름을 가져오거나 설정합니다. (다음에서 상속됨 Exception) |
StackTrace |
호출 스택의 직접 실행 프레임 문자열 표현을 가져옵니다. (다음에서 상속됨 Exception) |
TargetSite |
현재 예외를 throw하는 메서드를 가져옵니다. (다음에서 상속됨 Exception) |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetBaseException() |
파생 클래스에서 재정의된 경우 하나 이상의 후속 예외의 근본 원인이 되는 Exception 을 반환합니다. (다음에서 상속됨 Exception) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetObjectData(SerializationInfo, StreamingContext) |
매개 변수 이름 및 추가 예외 정보를 사용하여 SerializationInfo 개체를 검색합니다. |
GetObjectData(SerializationInfo, StreamingContext) |
파생 클래스에서 재정의된 경우 예외에 관한 정보를 SerializationInfo 에 설정합니다. (다음에서 상속됨 Exception) |
GetType() |
현재 인스턴스의 런타임 형식을 가져옵니다. (다음에서 상속됨 Exception) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ThrowIf(Boolean, Object) |
지정된 |
ThrowIf(Boolean, Type) |
지정된 |
ToString() |
현재 예외에 대한 문자열 표현을 만들고 반환합니다. (다음에서 상속됨 Exception) |
이벤트
SerializeObjectState |
사용되지 않습니다.
예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다. (다음에서 상속됨 Exception) |