【问题标题】:What is a disposed object in C#?什么是 C# 中的已处置对象?
【发布时间】:2015-06-05 13:28:44
【问题描述】:

我正在使用 C# 获得 ObjectDisposedException:

System.ObjectDisposedException:无法访问已处置的对象。

在了解为什么会出现错误之前,我想知道,究竟什么是已处置对象?

那么,了解了之后,一般为什么会出现这个ObjectDisposedException呢?我有一个程序可以将文件上传到 Amazon S3 并从 Amazon S3 下载文件,它在非常零星的情况下给我这个错误。

【问题讨论】:

  • 我们也可以看看你的作品吗?
  • 回答你的第二个问题:msdn.microsoft.com/en-us/library/…
  • 当您访问已释放的对象时会出现ObjectDisposedException。对于流和 SQL 连接对象,这意味着您要么在“使用”语句中使用了该对象,要么在该对象上显式调用了 DisposeClose 并再次尝试使用它。如果没有看到您的代码,或者这个错误发生在哪里,很难说出您为什么会得到它。

标签: c# amazon-s3 objectdisposedexception


【解决方案1】:

已处置对象是实现了已调用 Dispose 方法的 IDisposable 的对象。这可以显式调用,也可以在 using 语句完成后调用。如果它是偶尔发生的,则可能是一种竞争条件。

【讨论】:

  • 我确实调用了一个显式的 Dispose 方法,并且该错误只是偶尔发生。在为我使用的方法提供的一些代码示例中,它们在 PutObject 方法(Amazon SDK 方法)之后显示了 Dispose 方法,而有些则没有。现在我拿出了 Dispose 方法,到目前为止似乎还可以,我必须监控。感谢您的建议和解释。
  • 作为一般规则,如果对象实现了 IDisposable,您应该在对象上调用 Dispose,但在对象完成之前不要调用它。如果您打算在程序运行的整个过程中都可以使用一个对象来上传和下载文件,只需在程序关闭时处理它(最好在 finally 块中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2011-02-11
  • 2017-10-12
相关资源
最近更新 更多