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

c# - 应用新设置时如何防止 GraphicsDevice 被释放?

我的游戏窗口允许手动调整大小,这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小。游戏也使用了RenderTarget2D rt2d,在主 Draw 方法中设置了主渲染目标:GraphicsDevice.SetRenderTarget(rt2d),但是在主 Draw 方法结束时它被重置回null(默认渲染目标),这使得它有点令人困惑:这真的是问题的根源吗,在 Render Target 设置为 之间调整游戏窗口的大小rt2d,而不是重置为默认值?现在它看起来像它。

主 Draw 方法中的代码应该始终将主 Render Target 重置回null,因此通常不会发生这种情况。

尽管如此,调整游戏窗口大小的结果有时会导致GraphicsDevice.isDisposedreturn true,然后游戏System.ObjectDisposedException首先抛出SpriteBatch.End()。我发现有关此错误的帖子可以追溯到 XNA 的第一天,但​​没有很好的解释(也没有提及更改渲染目标,因此它也可能是这些海报问题的根源)。

现在我可以通过调用这个方法几次来触发这个错误:

…在主要的 Draw 方法中使用以下几行:

我的猜测是,如果在重置渲染目标之前调整大小发生,我应该中止帧绘制并重置渲染目标,但我仍然不确定这正是导致这种情况的原因。

UPD:有Window.ClientSizeChangedgraphics.PreparingDeviceSettings事件,但即使它们触发,默认渲染目标似乎也无济于事。

我想这不是“调整客户区大小和应用新图形设置之间的超时”或其他什么。这很可能是由非默认渲染目标引起的。

并且渲染目标大小可能与新屏幕大小不同,因为在将图形设备尺寸更改为完全相同的值时也会引发异常。

UPD2:我只是尝试全屏切换挂起的操作,将F11设置设置isFullscreenTogglePendingtrue并在 main 方法的开头检查它,Update但它根本没有帮助。Update然后我发现之前的全屏模式也是从主更新方法切换的,只是不是在一开始,而是在输入更新方法的一半,所以它在主方法中运行的位置并不重要,它仍然会导致此错误。有趣的是,抛出异常时GraphicsDevice.isDisposed假的。


这是异常消息:

它在spriteBatch.End()主要的 Draw 调用中。

如何防止此错误?


可能相关的问题:

0 投票
1 回答
778 浏览

linq - Linq 使用 DefaultIfEmpty 强制加载实体给出 ObjectDisposedException

我有这个 linq:

之后,我想查看结果:

这会在“if (inverter.InverterActualData == null)”行引发以下异常:

我要做的是获取逆变器列表,但同时加载其 Subplant 和 InverterActualData 属性。(另外,对于 Subplant,加载 Plant 属性)。

当 Inverter 没有 InverterActualData 记录时,就会出现问题。在这种情况下,将引发异常。

为什么我想在上下文关闭之前加载所有数据?因为一次访问数据库比分别为每个逆变器调用 InverterActualData 快得多。

如您所见,我正在尝试检查 InverterActualData 属性是否为空,但显然未加载。无论如何都会抛出异常。

我还尝试添加:

但这也不起作用。

这对我来说似乎很奇怪,因为在分析器中,查询被翻译成这样:

这正是我想要的。此外,在 DB 上运行此查询,可以获得 Inverter、Subplant 和 Plant 数据以及 InverterActualData 的默认值。

可能是什么问题呢?

0 投票
1 回答
11256 浏览

c# - 为什么它总是抛出 ObjectDisposedException?

由于windows phone不能处理gif,所以我写了一个小方法,但是好像有点错误。
下面的代码在运行到 (JPG 和 PNG 部分)bitimg.SetSource(e.Result); 时总是抛出异常;
正如它所说,这是否意味着我不能使用 e.Result 因为它已被处置?但是怎么会这样呢,方法还没有停止,编译器为什么要dispose呢?

为什么以及如何解决它?

错误信息:

{System.ObjectDisposedException:无法访问已处置的对象。对象名称:“MS.Internal.InternalMemoryStream”。在 MS.Internal.InternalMemoryStream.Seek(Int64 offset, SeekOrigin origin) at ImageTools.IO.Gif.GifDecoder.Decode(ExtendedImage image, Stream stream) at xicihutong.ViewModel.RichTextBoxBindingBehavior.<>c__DisplayClass7.b__4(Object s, OpenReadCompletedEventArgs e ) 在 System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) 在 System.Net.WebClient.OpenReadOperationCompleted(Object arg)}

}

====================================

0 投票
0 回答
231 浏览

c# - 如果所有输入都有效,则隐藏对话框 (ObjectDisposedException)

我正在为 Windows CE 5 扫描仪设备使用 Compact Framework 开发 C# GUI 应用程序。

该应用程序用于重复收集用户输入的数据,主要是通过条形码扫描仪。有两种类型的数据:仅在会话开始时提示的数据(称为固定值)和始终移动的数据。可以通过扫描一些特殊的条形码来更改固定值,这导致了我的问题:

固定值数据在对话框中输入到 ValidationTextBoxes(从 TextBox 派生的自写类)。到现在为止,我调用对话框,在用户扫描条码进行更改后,将所有固定值数据呈现给用户。如果某些数据无效,则会出现错误消息,并且在用户输入有效数据之前无法关闭对话框。我现在的任务是不显示对话框或尽快隐藏它。我认为在不为验证编写新类的情况下不可能更改完全隐藏的数据并对其进行验证(因为它发生在 GUI 控件中),所以我想用更改的数据调用对话框,验证它,然后如果一切正常,请隐藏它。否则保持打开状态直到现在。

调用以下方法来显示对话框。如果设置了“验证”标志,则应验证数据,如果有效,则应关闭表单。

目前我在“Control ctl = this.Controls[i];”处遇到了 ObjectDisposedException 在计时器中。打勾。

0 投票
0 回答
309 浏览

c# - 尝试运行表单时出现 ObjectDisposedException

我是一名新的 C# 程序员,我正在尝试制作一个程序来发送包含 MSSQL 表内容的电子邮件。主程序如下所示:

当我调试它显示行 Application.Run(new Form1()); 正在抛出 ObjectDisposedException。

表格1

当运行网络服务器的人部署它时,它在编译后第一次正确运行,但在此之后的所有时间,它第一次发送缓存的电子邮件,其中包含第一次运行时的表格内容。

任何帮助将不胜感激。如果我没有提供足够的信息,请告诉我。

0 投票
0 回答
53 浏览

vb.net - 如何保持新表单获取用于旧处置表单的消息

我有一个表单,可以打开并使用后台工作人员连接到现有的计算对象。当后台工作人员完成后,会发送一条消息,并且表单会运行一个 OnCompletion 方法。如果计算失败,该方法将创建一个消息框。让我们假设计算失败。然后,用户将收到有关失败的消息。现在我们关闭表单,打开一个新的表单实例,然后再次运行计算。计算再次失败,表单运行 OnCompletion 方法并在消息框处崩溃。

问题是“这个”(形式)被处置了。如果更改代码以测试 IsDiposed:

然后消息框没有被调用,但我看到我的 OnCompletion 方法立即第二次运行,IsDiposed 现在为假,并且消息框被正确调用。

虽然我测试表单是否已处理解决了问题,但如果我的 OnCompletion 方法被调用两次,我认为我一定做错了。

请注意,只有在原始表单已关闭时才会对 OnCompletion 进行双重调用。之后,每次运行计算,都会调用两次 OnCompletion 方法,第一次 this.IsDiposed 为 true,第二次为 false。

任何人都有解释或建议停止对 OnCompletion 的双重调用。

0 投票
2 回答
209 浏览

c# - c#反对处理异常-我该如何纠正它们?

我是初学者c#。我想让程序从 .wav 文件转换为 .raw 文件。我找到了一些来源,我想使用它。但是代码中发生了一些事情。该错误与 ObjectDisposedException 有关。

你能给我一些代码或想法吗?整个代码在

0 投票
0 回答
51 浏览

c# - 每当我尝试从列表中加载模型时抛出异常

无法访问已处置的对象。对象名称:“基本效果”。

每当我尝试从列表中加载模型时,都会引发此异常。该方法曾经有效,但最近失败了,我不知道为什么。

下面是我的渲染代码:

然后是我的列表代码(路径是模型的路径)

最后是 Draw 代码,放入 draw 方法。

澄清一下,我需要这个用于我的小团队一直在开发的游戏的关卡编辑器。任何帮助深表感谢。

0 投票
1 回答
1746 浏览

c# - 在应用程序关闭期间无法确定 System.ObjectDisposedException 的原因

我被困在调试场景中,我需要帮助了解如何获得有关我的应用程序正在发生的事情的更多信息。

当我关闭主窗体时抛出异常,似乎是在完全关闭之前的最后一点处理期间。

我得到以下两个例外之一,没有明显的原因为什么其中之一。我可以简单地打开应用程序并立即关闭它。将生成两者之一。如果有问题,如果我关注另一个正在运行的应用程序,返回我的应用程序,然后关闭它,那么#2 似乎更有可能。

例外 #1:

无法访问已处置的对象。
对象名称:“System.Net.Sockets.NetworkStream”。
在 System.Net.Sockets.NetworkStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 大小)

例外 #2:

安全句柄已关闭
System.Net.UnsafeNclNativeMethods.OSSOCK.WSAEventSelect(SafeCloseSocket socketHandle, IntPtr Event, AsyncEventBits NetworkEvents)

在我的应用程序中有两个直接使用 Sockets 的地方。

1) UDPClient 侦听器建立在BackgroundWorker. 只是我们在内部使用的一个小东西来监控数据库命中。

2) 调用我们的网站并获取一些信息的 HttpWebRequest。

这两个都已经运行了一段时间,没有问题,也没有改变,所以我怀疑他们没有罪。

因为这是一个客户端-服务器数据库应用程序,所以有很多网络流量正在进行,并且数据库引擎可能就是发生这种情况的地方。我只是不知道,我需要帮助的地方。

数据包/流量嗅探器?Visual Studio 中的设置/设置以获得有关异常的更好信息?你将如何追踪这件事?

0 投票
5 回答
5737 浏览

c# - CryptoStream 可以让基本流保持打开状态吗?

我创建一个MemoryStream,将其传递CryptoStream给写作。我想要CryptoStream加密,并让MemoryStream我打开,然后读入别的东西。但是一旦CryptoStream被处理,它也被处理MemoryStream

可以以某种方式CryptoStream让基地MemoryStream开放吗?