问题标签 [objectdisposedexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3213 浏览

c# - NHibernate 会话 ObjectDisposedException

有没有办法验证 NHibernate 是否已经处理了 Session?

我在 Session 上有一个包装类,它有自己的 Finalizer 和 IDispoable 实现,但是如果 Session 在我自己在我的类中处理之前被处置,我最终会收到 ObjectDisposedException。

我真的不想用

但我不确定其他任何方式。Session.IsOpen 和 Session.IsActive 属性似乎没有为我提供任何可靠的信息来确认会话已被处理。

如需完整源代码,您可以在Assembla上查看。

0 投票
13 回答
29823 浏览

c# - 从负载处理程序关闭表单

我有一个非常奇怪的行为,似乎只发生在一种形式上。

基本上我正在创建一个实例Form,并调用Show()以非阻塞显示表单。在该表单的事件处理程序中,我有一些在某些情况下Load可能会调用的逻辑。this.Close()这会关闭表单,但随后Show()客户端代码中的表单方法会抛出ObjectDisposedException.

ObjectDisposedException 的堆栈跟踪如下:

在 System.Windows.Forms.Control.CreateHandle()
在 System.Windows.Forms.Form.CreateHandle()
在 System.Windows.Forms.Control.get_Handle()
在 System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
在 System .Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.Show()
...等。

这就是我所看到的:

  1. Control.Show()叫做
  2. 我的表格已启动
  3. OnFormLoad方法被调用
  4. 事件FormLoad处理程序被调用,在其中我调用this.Close()
  5. OnFormClosing方法被调用
  6. 事件FormClosing处理程序被调用
  7. Dispose在我的表单及其所有用户控件上调用

然后在接近Control.Show()方法末尾的某个地方,它尝试获取表单的句柄,因为对象被标记为已释放,所以它吓坏了并抛出异常。

我真正的问题是,为什么我可以毫无例外地在我拥有的所有其他表格上做同样的事情?是GC问题吗?我试过在GC.Collect()之后立即打电话this.Close(),这没有什么区别。就像我说的,它 100% 的发生在这个表单上,从来没有发生在其他任何地方,不管子用户控件、表单变量的范围等。

有任何想法吗?

0 投票
6 回答
5052 浏览

c# - 打开的 SerialPort 使 C# 应用程序崩溃

计算机通过物理 COM1 连接到测量设备。我有一个简单的表格,我打开一个串口,告诉设备我还活着,偶尔设备会发送数据。(每隔几分钟)

读取功能(有效):

大约一分钟后,应用程序崩溃(即使在调试时)。它报告一个 ObjectDisposedException (对于底层流?)。该消息表明 SafeHandle 已关闭。堆栈跟踪如下:

在 Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile, NativeOverlapped lpOverlapped, Int32& lpNumberOfBytesTransferred, Boolean bWait) 在 System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System. System.Threading.ThreadHelper.ThreadStart() 处的 Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态)*

有任何想法吗?该问题被广泛报道,但通常涉及设备与 PC 物理分离。

0 投票
2 回答
1005 浏览

.net - 在进程关闭期间处理 ObjectDisposedException 和类似异常?

我的应用程序通常在 10-20 个线程上运行,这些线程几乎每秒都会向 GUI 发送事件以更新某些控件。

当用户关闭这些中间的应用程序时,与这些事件相关的所有更新都会导致几次随机崩溃。主要是ObjectDisposedExceptionNullReferenceException

由于事件已经抛出但尚未由 .NET Framework 处理,因此它们不处于我可以取消它们的状态。

我不太确定处理这个问题的最佳方法。目前我只是吞下例外的例外。

0 投票
2 回答
8682 浏览

c# - 对象处理异常

好的,伙计们,我的代码中突然出现了这个以前没有出现过的问题。

我收到一个 ObjectDisposedException 说该行:

由于 listBox1 已处置,因此无法执行。这怎么可能,有什么需要做的吗?

0 投票
2 回答
3663 浏览

c# - TcpClient 和 NetworkStream 配置问题

我正在使用这段代码来处理与服务器的连接并从客户端读取数据

现在,ReceiveMessage 方法调用BeginRead()作为参数传递的 Stream,但我得到了 ObjectDisposedException。

我知道一个解决方案是当我不再需要 Stream 时调用 stream.Dispose() ,但我真的在寻找一个可以保持using子句使用的解决方案。

谢谢

0 投票
2 回答
6179 浏览

exception-handling - 在 vb.net 中,如何强制退出应用程序并抑制错误消息?

我希望用户能够简单地退出我的应用程序。但是,由于某种原因,我在时间延迟上的代码,由秒表控制,仍在尝试执行。我不在乎它是否尝试这样做,但我想停止错误并强制退出应用程序,终止它们所在的所有正在运行的线程。

我正在使用带有 SP1 的 Visual Basic Express 2008,并且我在 vb.net 中进行编码,这是一个 WinForm 应用程序。

我试过用Formname.Close()简单地关闭表单,我也试过Application.Exit()。我什至尝试了一个 If Then 语句,它退出了引用我的文本框的线程,并使用Application.ExitThread()退出它

我有:

ObjectDisposedException 未处理

无法访问已处置的对象。对象名称:“文本框”。

我该如何处理这个异常或者干脆完成退出?

谢谢您的帮助!

编辑:澄清一下,我不在乎这是如何实现的,我只是希望应用程序停止运行,并且不会发生错误。

0 投票
3 回答
4839 浏览

.net - 抛出 ObjectDisposedException 时应该将什么作为 objectName 传递?

在实现 IDisposable 时,我理解在对象被释放后不应该调用的每个方法都应该抛出ObjectDisposedException. 但是应该传递给异常构造函数的名称对象的标准是什么?

0 投票
2 回答
1563 浏览

c# - ObjectDisposedException - 在 GUI 线程中运行秒表

我有一个秒表在不同的线程中运行,它会更新标签中的 GUI 线程以随着时间的推移显示。当我的程序关闭时,ObjectDisposedException当我在表单 GUI 中调用this.Invoke(mydelegate);以使用秒表中的时间更新标签时,它会抛出一个错误。

我该如何摆脱这个ObjectDisposedException

我试图在 FormClosing 事件中停止秒表,但它没有处理它。

这是代码:

0 投票
4 回答
824 浏览

c# - IDisposable、ObjectDisposedException 和线程安全类型

为了在所有主要公开方法的开头 bool disposed有条件地抛出 an ,在其他线程安全类型上跟踪经典字段是否有任何意义?ObjectDisposedException

我在网上的一些地方看到过这种模式推荐,但我不确定作者是否正确使用它,所以这个问题假设他们是。

在这种情况下,似乎确保disposed条件在条件评估之外为真的唯一方法是在每个暴露成员的整个主体上使用同步机制,例如 lock(),包括 Dispose(bool) 方法。这不会使类型再次有效地单线程吗?

如果这是真的,那么使用它就没有意义了,因此您不能在某些 IDisposable 实现中依赖 ObjectDisposedException 机制——那么如果没有必要,我们为什么还要使用这种机制呢?

====

我猜 IDisposable 和 ObjectDisposedException 只是不适合线程安全类型。