问题标签 [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 投票
2 回答
1001 浏览

c# - 解决我的对象处理异常

您好,any1 可以告诉我在哪里尝试捕获此异常或解决它。当我关闭接收句柄时,如果我仍然收到一些数据,就会出现这个错误。

0 投票
1 回答
250 浏览

winforms - 无法访问 Delphi Prism 中已处置的对象

我在 Delphi Prism 下为 Mono 编程。在打开已经打开和关闭的窗口窗体后,我不断收到此错误“无法访问已处理的对象”,即使窗口窗体是在类中声明并在构造函数中实例化如下。

这是声明它的类:

这是实例化或创建它的构造函数:

以下是在按钮事件中显示或打开表单的方式:

由于 fr 是一个窗口窗体,它是类的一部分,很像一个全局变量,为什么在打开它后关闭它时会释放窗口窗体。它不是一直保存在内存中,直到整个程序关闭以便于访问?

更新: 在 onFormClosing 中,我隐藏了表单并且它似乎可以工作,但是当我尝试再次重新打开表单时,它会引发与之前“无法访问已处置对象”相同的异常。

0 投票
2 回答
24711 浏览

c# - System.ObjectDisposedException 程序崩溃

我的程序有一个奇怪的问题。我正在开发一个 Windows 窗体应用程序。当我通过 Visual Studio (F5) 对其进行调试时,它可以正常工作,但是当我运行它的可执行文件时,它会崩溃并给我“mscorlib.dll 中发生'System.ObjectDisposedException' 类型的未处理异常”。

我试图放置一个顶级(在我最外层的函数上)try/catch 来捕获这个异常,但程序仍然崩溃。我在这里想念什么?

我没有上传代码,因为我必须上传整个代码让你看看问题出在哪里。

0 投票
1 回答
366 浏览

wcf - Handling ObjectDisposedExceptions on disconnected WCF channels

When a method is called on a WCF channel that has been disconnected for some reason, it raises an ObjectDisposedException.

Now is normal operation this should not happen, but if for some reason it did, I would like to be able to handle the exception nicely by showing an error to the user like "An operation failed because the service is not connected".

The problem is I just get a generic disposed exception in my appwide exception handler, so I have no way of determining whether WCF threw it.

to get around this I currently have a wrapper class that simply wraps all service method calls with try/catch and rethrows any ObjectDisposedException's as a custom comms exception that my global handler can deal with. this is a load of boilerplate stuff I could do without though.

Is there any way of determining whether WCF threw the exception?

Cheers

0 投票
2 回答
6299 浏览

c# - 关闭 .NET SerialPort 后的 ObjectDisposedExecption

我正在使用 .NET 4 SerialPort 对象与连接到 COM1 的设备通信。

完成设备后,我在 SerialPort 上调用 Close。我不叫 Dispose,但我相信 Close 和 Dispose 在这里是同义词。

通常这工作得很好。

但是,有时我会在一段时间后遇到以下异常(我看到的时间范围从 5 毫秒到 175 毫秒):

我的代码都没有在这个堆栈上。

我找到了http://blog.zachsaw.com/2010/07/serialport-ioexception-workaround-in-c.html,但那里的解决方案不起作用。进一步检查,问题是IOException,而不是ObjectDisposedException

当 USB 转串口设备被拔出,但 COM1 是板载的,因此它不会意外消失时,有很多帖子涉及观察到的问题。

这里的问题也不是我的问题;SerialPort 在其使用期间保持活动状态,并且仅在我与设备通话完毕时才关闭。(完成后,设备处于不会传输任何进一步数据的状态。)

SLaks建议在 的入口处设置一个断点SafeHandle.Dispose,以确定我什么时候处理我不应该的东西,但我在这个断点上打了几十次。SerialPort.Close当我完成使用串行设备时,我的一次调用调用了 3 次,其余大约一半在 GC 线程中。其余部分似乎与 WPF UI 元素有关。

我现在不知所措。我从这里去哪里?

有没有办法确定哪个 SafeHandle 属于哪个对象,所以我可以确定我不会意外处置它?
除了关闭我需要正确关闭 SerialPort 之外,还有其他咒语吗?

0 投票
1 回答
961 浏览

c# - XNA SpriteBatch.End() ObjectDisposedException

我在抛出异常时遇到了一些问题。下面是来自 XNA 循环的 draw 方法。

这是来自图形系统的绘制方法。

图形组件存储在 graphicsSystem 中的 List<> 中。我认为问题的一部分可能是我跨项目工作。上面的 Top 循环在一个 XNA 项目中。第二种绘制方法在我构建的一个游戏库中。最后,component.draw() 方法的实际实现是在第三个项目中,该项目特定于我正在开发的当前游戏。图形系统中的纹理字段是在构建图形系统时从 Content.Load 函数初始化的。

我尝试了几种不同的方法。我将 spritebatch.begin 和 spritebatch.end 移到图形系统中,仍然导致异常。当图形系统中的组件列表为空时,不会出现异常。

我不确定当范围从一个项目移动到另一个项目时加载的纹理是否超出范围,但我认为不应该是这种情况。我在一个可行的项目中也有相同的设置,但是我正在重构为多个以在其他地方使用一些代码。我不会在正在消失的纹理的任何地方调用 dispose,所以我什至不确定是否要开始狩猎。

如果不清楚,请告诉我,我会尝试详细说明。

0 投票
1 回答
694 浏览

entity-framework - 无法可靠地查询 EntityFramework 共享 dbcontext

我正在尝试在多个存储库中共享一个带有 4 个 DbSet 的简单 DbContext,我的每个存储库都继承自这个基类

问题:这是在存储库之间共享连接的适当方式吗?

访问各种存储库时,我的单元测试出现间歇性故障。存储库方法 GetEntityByName 引发异常

测试方法Tests.Service.TestDelete 抛出异常:System.ObjectDisposedException:ObjectContext 实例已被释放,不能再用于需要连接的操作。

如果数据库已经存在,则代码按预期执行。当我将 GetEntityByName(string name) 的实现更改为以下非性能代码时,它也可以工作

问题:这里发生了什么?

请记住,如果在我运行测试时数据库存在,我根本不会收到错误。

tia, jt

0 投票
0 回答
229 浏览

dispose - 处置控件后的 ObjectDisposedException

我对我要问的问题有现实的需求,但为了简单起见,我将问题归结为这一点。

  • 创建 C# windows 窗体应用程序项目
  • 在表单中添加一个文本框和一个按钮。
  • 向文本框添加离开事件。
  • 将 Click 事件添加到按钮。

使用此代码

运行项目并将光标放在文本框中。现在点击按钮离开。

通过离开文本框会导致按钮被释放,但按钮的 Click 事件位于文本框的 Leave 事件后面等待处理。但是没有文本框了,所以你得到了 ObjectDisposedException。

所以,....问题是我如何消除排队事件,以便我可以安全地处理按钮。

0 投票
3 回答
1333 浏览

c# - C#/WPF 应用程序抛出 ObjectDisposedException;为什么我无法捕获或获取堆栈跟踪?

我有一个 C# WPF UI 应用程序,当我关闭它时,我总是得到一个 Windows 应用程序崩溃对话框(“UIDemo 遇到问题,需要关闭。”)。

错误报告表明它是一个 System.ObjectDisposedException,它表明在某个已处置对象上调用了某个方法。没关系,我明白那部分。

我很想修复它。 我只是无法获得关于这个混蛋的堆栈跟踪。

该例外正在规避以下所有内容:

  • 我的 DispatcherUnhandledException 处理程序
  • 我的 try/catch 围绕 Exit 事件处理程序的全部内容
  • 在该 Windows 应用程序崩溃对话框中单击“调试”将其关闭并且不执行任何操作
  • 在 VisualStudio 的调试模式下运行应用程序似乎可以工作,但奇怪的是,它似乎并没有以这种方式崩溃,所以没有任何痕迹

我所要做的只是 Windows 发送给 MS 的错误报告的神秘内容。这些十六进制的内存转储并没有那么有用。

有谁知道我怎么能得到那个该死的痕迹?

0 投票
3 回答
808 浏览

c# - 如何在我的 C#/MVVM 应用程序中解决莫名其妙的 ObjectDisposedExceptions?

我已经编写了我的第一个 MVVM 应用程序。当我关闭应用程序时,我经常遇到由 ObjectDisposedException 引起的崩溃。在应用程序窗口消失后,应用程序死亡时出现崩溃。

获取堆栈跟踪很困难(请参阅我的另一个问题),但最后我做到了,发现我的堆栈跟踪完全包含在 C# 库中(kernel32!BaseThreadStart、mscorwks!Thread、mscorwks!WKS 等)。

此外,这种崩溃是不一致的。在我最后一次结帐和重建之后,它停止了......一段时间。然后它回来了。一旦它开始发生,它就会继续发生,即使我“清理”并重建。但是擦除和结帐有时会使其停止一段时间。

我认为正在发生的事情:

我认为 GarbageCollector 在处理我的 ViewModel 时正在做一些有趣的事情。我的 ViewModelBase 类析构函数在调用析构函数时有一个 WriteLine 来记录,在我的 4 个 ViewModel 中,只有 2 或 3 个被释放,并且它似乎因结帐而异(例如,当我在我的上运行它时,我看到一个持续重复序列,但我的同事看到了一个不同的序列,其中放置了不同的对象)。

由于堆栈跟踪中没有我的代码调用,我认为这意味着调用已处置对象的方法的不是我的代码。所以这让我觉得CLR是愚蠢的。

这有意义吗?有什么方法可以让 GC 保持一致吗?这是红鲱鱼吗?

其他可能有帮助的详细信息:
我的所有视图和视图模型都是在我的 App.xaml.cs 文件的应用程序的启动事件处理程序中创建的。同一个处理程序将 ViewModels 分配给 DataContexts。我不确定这是否是正确的 MVVM 做法(正如我所说,我的第一个 MVVM 应用程序),但我不明白为什么它会导致不良行为。

如有必要,我可以粘贴代码。