ObjectDisposedException クラス
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
破棄されたオブジェクトで操作が実行されるとスローされる例外。
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 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するオブジェクトのメンバーにアクセスしようとして、そのオブジェクトが破棄されると、 がスローされます。 通常、この例外は次のいずれかの条件によって発生します。
オブジェクトの メソッド (または
IDisposableAsync
オブジェクトのDispose
メソッド) を呼び出IDisposable
し、オブジェクトのDisposeAsync
状態を取得または設定するインスタンス メンバーにアクセスしようとしています。 次の例は、 メソッドを ObjectDisposedException 呼び出した後にタイマー通知の頻度をリセットしようとしたときにスローされる を Timer.Dispose 示しています。C#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 提供します。 と<xref:System.IAsyncDisposable.DisposeAsync%2A?displayProperty=nameWithType>
についても同じことが当てはまりますCloseAsync
。オブジェクト
Dispose
またはDisposeAsync
メソッドを複数回呼び出しました。 通常、例外はスローされません。 ただし、型が または IAsyncDisposable.DisposeAsyncを実装するIDisposable.Dispose方法によっては、そのメソッドへの複数の呼び出しが許可されない場合があります。
ほとんどの場合、この例外は開発者エラーの結果です。 ブロック内の try
/catch
エラーを処理する代わりに、通常はオブジェクトを再インスタンス化してエラーを修正する必要があります。
Object |
シリアル化したデータを使用して、ObjectDisposedException クラスの新しいインスタンスを初期化します。 |
Object |
破棄されたオブジェクトの名前が含まれている文字列を使用して、ObjectDisposedException クラスの新しいインスタンスを初期化します。 |
Object |
指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、ObjectDisposedException クラスの新しいインスタンスを初期化します。 |
Object |
指定したオブジェクト名とメッセージを使用して、ObjectDisposedException クラスの新しいインスタンスを初期化します。 |
Data |
例外に関する追加のユーザー定義情報を提供する、キーと値のペアのコレクションを取得します。 (継承元 Exception) |
Help |
この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。 (継承元 Exception) |
HResult |
特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。 (継承元 Exception) |
Inner |
現在の例外の原因となる Exception インスタンスを取得します。 (継承元 Exception) |
Message |
エラーを説明するメッセージを取得します。 |
Object |
破棄されたオブジェクトの名前を取得します。 |
Source |
エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。 (継承元 Exception) |
Stack |
呼び出し履歴で直前のフレームの文字列形式を取得します。 (継承元 Exception) |
Target |
現在の例外がスローされたメソッドを取得します。 (継承元 Exception) |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Get |
派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の根本原因である Exception を返します。 (継承元 Exception) |
Get |
既定のハッシュ関数として機能します。 (継承元 Object) |
Get |
パラメーター名と追加の例外情報を使用して SerializationInfo オブジェクトを取得します。 |
Get |
派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。 (継承元 Exception) |
Get |
現在のインスタンスのランタイム型を取得します。 (継承元 Exception) |
Memberwise |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
Throw |
指定した が のObjectDisposedException場合に をスローします |
Throw |
指定した が のObjectDisposedException場合に をスローします |
To |
現在の例外の文字列形式を作成して返します。 (継承元 Exception) |
Serialize |
古い.
例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。 (継承元 Exception) |
製品 | バージョン |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 |
.NET Standard | 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1 |
UWP | 10.0 |