本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

ObjectDisposedException 类

 

对已释放的对象执行操作时所引发的异常。

命名空间:   System
程序集:  mscorlib(位于 mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.InvalidOperationException
        System.ObjectDisposedException

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ObjectDisposedException : InvalidOperationException

名称说明
System_CAPS_protmethodObjectDisposedException(SerializationInfo, StreamingContext)

用序列化数据初始化 ObjectDisposedException 类的新实例。

System_CAPS_pubmethodObjectDisposedException(String)

新实例初始化 ObjectDisposedException 类包含已释放对象的名称的字符串。

System_CAPS_pubmethodObjectDisposedException(String, Exception)

使用指定的错误消息和对作为此异常原因的内部异常的引用来初始化 ObjectDisposedException 类的新实例。

System_CAPS_pubmethodObjectDisposedException(String, String)

新实例初始化 ObjectDisposedException 使用指定的对象名称和消息的类。

名称说明
System_CAPS_pubpropertyData

获取提供有关异常的其他用户定义信息的键/值对集合。(继承自 Exception。)

System_CAPS_pubpropertyHelpLink

获取或设置指向与此异常关联的帮助文件链接。(继承自 Exception。)

System_CAPS_pubpropertyHResult

获取或设置 HRESULT(一个分配给特定异常的编码数字值)。(继承自 Exception。)

System_CAPS_pubpropertyInnerException

获取导致当前异常的 Exception 实例。(继承自 Exception。)

System_CAPS_pubpropertyMessage

获取描述错误的消息。(覆盖 Exception.Message。)

System_CAPS_pubpropertyObjectName

获取已释放对象的名称。

System_CAPS_pubpropertySource

获取或设置导致错误的应用程序或对象的名称。(继承自 Exception。)

System_CAPS_pubpropertyStackTrace

获取调用堆栈上的即时框架字符串表示形式。(继承自 Exception。)

System_CAPS_pubpropertyTargetSite

获取引发当前异常的方法。(继承自 Exception。)

名称说明
System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(继承自 Object。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(继承自 Object。)

System_CAPS_pubmethodGetBaseException()

当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根源。(继承自 Exception。)

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(继承自 Object。)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

检索 SerializationInfo 参数名称和附加异常信息的对象。(覆盖 Exception.GetObjectData(SerializationInfo, StreamingContext)。)

System_CAPS_pubmethodGetType()

获取当前实例的运行时类型。(继承自 Exception。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(继承自 Object。)

System_CAPS_pubmethodToString()

创建并返回当前异常的字符串表示形式。(继承自 Exception。)

名称说明
System_CAPS_proteventSerializeObjectState

当异常被序列化用来创建包含有关该异常的徐列出数据的异常状态对象时会出现该问题。(继承自 Exception。)

ObjectDisposedException 您尝试访问作为对象成员的实现时,将引发 IDisposable 接口,并将该对象已被释放。 通常情况下,此异常由下列情况之一引起︰

  • 已调用对象的 Dispose 方法,而您正在尝试访问的实例成员,获取或设置对象的状态。 下面的示例阐释 ObjectDisposedException 引发 when you try to 调用后重置计时器通知的频率 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()
    
  • 已调用对象的 Close 方法,而您正在尝试访问的实例成员,获取或设置对象的状态。 通常情况下, Close 方法提供类型的公共实现 IDisposable.Dispose 方法。

  • 已调用对象的 Dispose 方法多次。 通常情况下,这不会引发异常。 但是,根据如何实现一种类型 IDisposable.Dispose, ,它可能不允许对多个调用 Dispose

在大多数情况下,此异常将导致从开发人员的错误。 而不是处理中的错误 try/catch 块中,您应该更正该错误,通常 reinstantiating 对象。

下面的示例演示了将导致一个错误 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);
      }
   }
}

此代码生成以下输出:

Caught:
  Cannot access a closed Stream.

通用 Windows 平台
自 8 起可用
.NET Framework
自 1.1 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用

此类型的所有公共静态(Visual Basic 中的 已共享 在 Visual Basic 中)成员都是线程安全的。不保证所有实例成员都是线程安全的。

返回页首
显示: