问题标签 [dispose]

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 回答
5857 浏览

c# - C# 在进程被杀死时清理非托管资源

我有一个在进程外实例化 COM exe 的类。班级是

我称之为如下

现在,当程序正常执行时,这会清理我的 COM 对象。但是,如果我在执行过程中关闭程序,则框架不会调用释放我的非托管对象的代码。这很公平。但是,有没有办法强制程序在被杀死的情况下自行清理?

编辑:从任务管理器的硬杀来看,它看起来并不乐观:(

0 投票
4 回答
11370 浏览

oracle - 如何在 .NET 中关闭 OracleConnection

假设我有这两个对象:

要关闭连接或 Oracle,我是否必须调用 command.Dispose()、connection.Dispose() 或两者都调用?

这是否足够好:

0 投票
2 回答
7820 浏览

c# - 是否可以相信 Page_Unload 将始终运行并且是 Dispose() 代码的好地方?

我熟悉 try{}finally{} 模式、using(){} 模式作为确保调用 Dispose() 的方法,但对于 ASP.NET 页面,Dispose 中创建的对象是否同样安全Page_Unload 事件的页面范围?改写 Page 的 Dispose() 方法是否有意义?

我不确定是什么代码引发了 Page_Unload 事件或 Page Dispose() 方法,所以我不知道它会运行的保证是什么。

0 投票
5 回答
48754 浏览

c# - using 子句会关闭此流吗?

我显然已经养成了一个不好的编码习惯。这是我一直在编写的代码示例:

我认为这是因为该using子句明确调用Close()and Dispose()on theStreamReaderFileStream将被关闭。

我可以解决我遇到的问题的唯一方法是将上面的块更改为:

是否应该StreamReader通过在第一个区块中的处置来关闭底层证券FileStream?或者,我弄错了吗?

编辑

我决定发布实际有问题的代码块,看看我们是否能找到这个问题的根源。我现在只是好奇。

我以为我的using子句有问题,所以我将所有内容都扩展出来,但每次都无法复制。我在这个方法调用中创建了文件,所以我认为没有其他任何东西在文件上打开了句柄。我还验证了Path.Combine调用返回的字符串是否正确。

0 投票
5 回答
14371 浏览

c# - 在 C# 中从父表单处理表单?

我有一个表单,当单击一个按钮(form1button)时会打开一个新表单。在子窗体上会有另一个按钮'form2button'。现在,如果我点击这个 form2button 新的 form2 应该被处理掉。但是因为 form2 对象是在 form1 类方法中创建的,所以我无法在 form2 类方法(fom2buttonclick)中处理该对象。所以我使用静态来完成我的工作,如下面的伪代码所示。

表格1:

表格2:

有没有其他更好的方法来做到这一点。或者 C# 设计本身不提供替代机制。我是 C# 新手。请帮帮我..

编辑

当单击 form2 上的按钮时,我想关闭(显式处理)在 form1 类中创建的 form2 对象。此编辑是为了更加清晰。

0 投票
16 回答
167961 浏览

c# - 完成与处置

为什么有些人使用Finalize方法而不是Dispose方法?

在什么情况下你会使用Finalize方法而不是Dispose方法,反之亦然?

0 投票
6 回答
1099 浏览

c# - 如何处理启动/停止可能需要很长时间才能启动的 API 接口

我有一个应用程序需要使用供应商提供的 API 来在呼叫路由到用户的分机时执行屏幕弹出。另一位开发人员致力于让 API 正常工作,并提供了一个不太正确的原型包装类,我正在努力让它正确。

因为这个 API 在返回之前可能会阻塞几分钟,所以开发者在一个单独的线程中启动了 API 接口代码,如下所示:

如果电话服务器无响应,则对 Initialize 的调用可能会挂起。

我不认为这样做的开发人员是故意的,但是当 API 以这种方式初始化时,线程会继续运行,所以现在我必须先停止线程,然后才能在我想要清理的时候进行清理. 我还必须使用 Invoke 从线程中获取事件,正如其他人在我之前的问题中如此友好地指出的那样,但现在正在工作。

无论如何,这里是用来关闭一切和清理的逻辑:

当然,整个混乱中有一个 try/catch 来防止未处理的异常。

我最大的问题是,当 API 接口代码在单独的线程中运行时,如何调用关闭代码?我需要清理以防用户注销然后重新登录,因为如果我不这样做,API 就会混淆。Thread.Abort 不起作用,因为它无法捕获异常,并且“volatile bool”方法也不起作用,原因很明显(大多数时候,API 线程不活动)。

因此,如果 API 接口代码在单独的线程上运行,似乎没有办法调用关闭逻辑。Thread.Abort() 绕过所有逻辑并在不清理的情况下杀死线程。调用 Shutdown 方法时,从 GUI 线程调用关闭逻辑会挂起。那么,我能做些什么呢?

IDispose 接口只是在 GUI 线程中增加了另一层抽象,并没有解决这里的问题。

现在,为了开发其余的代码,我将完全消除线程。但是,在我发布应用程序之前,我需要弄清楚这一点。

有人吗?

谢谢,
戴夫

0 投票
2 回答
4288 浏览

powershell - 如何在 PowerShell 中处理 System.Xml.XmlWriter

我正在尝试处理 XmlWriter 对象:

错误:

方法调用失败,因为 [System.Xml.XmlWellFormedWriter] 不包含名为“Dispose”的方法。

另一方面:

我该怎么办?

0 投票
5 回答
4011 浏览

c# - 通过引用传递 IDisposable 对象会导致错误?

我正在尝试创建一个通用方法来处理实现IDisposable的对象,称为DisposeObject()

为了确保我正在处理由原始引用指向的对象,我试图通过引用传递一个对象。

但我收到一个编译错误,上面写着

'ref' 参数类型与参数类型不匹配

在下面的(简化的)代码中,两者都_Baz实现_BarIDisposable

替代文字

所以问题是,

  1. 为什么我会收到此错误?
  2. 有没有办法绕过它?

[更新] 从目前提供的答案来看,只要我不将 IDisposable 参数设置为 null,我就可以简单地按值传递对象,而无需使用ref. 我现在遇到了另一个麻烦,是否nullDisposeObject方法内设置一次性对象。

以下是完整性的完整来源:

[结果]
我删除了将参数设置为 null ( obj = null;)的代码,DisposeObject 所以最终的代码变成了。

0 投票
4 回答
2283 浏览

c# - 这个 IDisposable 实现是否正确?

我永远记不起实现 IDisposable 接口的所有规则,所以我试图想出一个基类来处理所有这些并使 IDisposable 易于实现。我只是想听听你的意见,如果这个实现是好的,或者你是否看到了我可以改进的地方。这个基类的用户应该从它派生,然后实现两个抽象方法ReleaseManagedResources()ReleaseUnmanagedResources(). 所以这里是代码: