다음을 통해 공유


ObjectDisposedException 클래스

정의

삭제된 개체에서 연산이 수행될 때 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
상속
ObjectDisposedException
상속
특성

예제

다음 예제에서는 예외가 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)

지정된 condition true경우를 ObjectDisposedException throw합니다.

ThrowIf(Boolean, Type)

지정된 condition true경우를 ObjectDisposedException throw합니다.

ToString()

현재 예외에 대한 문자열 표현을 만들고 반환합니다.

(다음에서 상속됨 Exception)

이벤트

SerializeObjectState
사용되지 않습니다.

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.

(다음에서 상속됨 Exception)

적용 대상

추가 정보