问题标签 [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.
c# - C# 在进程被杀死时清理非托管资源
我有一个在进程外实例化 COM exe 的类。班级是
我称之为如下
现在,当程序正常执行时,这会清理我的 COM 对象。但是,如果我在执行过程中关闭程序,则框架不会调用释放我的非托管对象的代码。这很公平。但是,有没有办法强制程序在被杀死的情况下自行清理?
编辑:从任务管理器的硬杀来看,它看起来并不乐观:(
oracle - 如何在 .NET 中关闭 OracleConnection
假设我有这两个对象:
要关闭连接或 Oracle,我是否必须调用 command.Dispose()、connection.Dispose() 或两者都调用?
这是否足够好:
c# - 是否可以相信 Page_Unload 将始终运行并且是 Dispose() 代码的好地方?
我熟悉 try{}finally{} 模式、using(){} 模式作为确保调用 Dispose() 的方法,但对于 ASP.NET 页面,Dispose 中创建的对象是否同样安全Page_Unload 事件的页面范围?改写 Page 的 Dispose() 方法是否有意义?
我不确定是什么代码引发了 Page_Unload 事件或 Page Dispose() 方法,所以我不知道它会运行的保证是什么。
c# - using 子句会关闭此流吗?
我显然已经养成了一个不好的编码习惯。这是我一直在编写的代码示例:
我认为这是因为该using
子句明确调用Close()
and Dispose()
on theStreamReader
也FileStream
将被关闭。
我可以解决我遇到的问题的唯一方法是将上面的块更改为:
是否应该StreamReader
通过在第一个区块中的处置来关闭底层证券FileStream
?或者,我弄错了吗?
编辑
我决定发布实际有问题的代码块,看看我们是否能找到这个问题的根源。我现在只是好奇。
我以为我的using
子句有问题,所以我将所有内容都扩展出来,但每次都无法复制。我在这个方法调用中创建了文件,所以我认为没有其他任何东西在文件上打开了句柄。我还验证了Path.Combine
调用返回的字符串是否正确。
c# - 在 C# 中从父表单处理表单?
我有一个表单,当单击一个按钮(form1button)时会打开一个新表单。在子窗体上会有另一个按钮'form2button'。现在,如果我点击这个 form2button 新的 form2 应该被处理掉。但是因为 form2 对象是在 form1 类方法中创建的,所以我无法在 form2 类方法(fom2buttonclick)中处理该对象。所以我使用静态来完成我的工作,如下面的伪代码所示。
表格1:
表格2:
有没有其他更好的方法来做到这一点。或者 C# 设计本身不提供替代机制。我是 C# 新手。请帮帮我..
编辑
当单击 form2 上的按钮时,我想关闭(显式处理)在 form1 类中创建的 form2 对象。此编辑是为了更加清晰。
c# - 完成与处置
为什么有些人使用Finalize
方法而不是Dispose
方法?
在什么情况下你会使用Finalize
方法而不是Dispose
方法,反之亦然?
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 线程中增加了另一层抽象,并没有解决这里的问题。
现在,为了开发其余的代码,我将完全消除线程。但是,在我发布应用程序之前,我需要弄清楚这一点。
有人吗?
谢谢,
戴夫
powershell - 如何在 PowerShell 中处理 System.Xml.XmlWriter
我正在尝试处理 XmlWriter 对象:
错误:
方法调用失败,因为 [System.Xml.XmlWellFormedWriter] 不包含名为“Dispose”的方法。
另一方面:
我该怎么办?
c# - 通过引用传递 IDisposable 对象会导致错误?
我正在尝试创建一个通用方法来处理实现IDisposable的对象,称为DisposeObject()
为了确保我正在处理由原始引用指向的对象,我试图通过引用传递一个对象。
但我收到一个编译错误,上面写着
'ref' 参数类型与参数类型不匹配
在下面的(简化的)代码中,两者都_Baz
实现_Bar
了IDisposable。
所以问题是,
- 为什么我会收到此错误?
- 有没有办法绕过它?
[更新]
从目前提供的答案来看,只要我不将 IDisposable 参数设置为 null,我就可以简单地按值传递对象,而无需使用ref
. 我现在遇到了另一个麻烦,是否null
在DisposeObject
方法内设置一次性对象。
以下是完整性的完整来源:
[结果]
我删除了将参数设置为 null ( obj = null;
)的代码,DisposeObject
所以最终的代码变成了。
c# - 这个 IDisposable 实现是否正确?
我永远记不起实现 IDisposable 接口的所有规则,所以我试图想出一个基类来处理所有这些并使 IDisposable 易于实现。我只是想听听你的意见,如果这个实现是好的,或者你是否看到了我可以改进的地方。这个基类的用户应该从它派生,然后实现两个抽象方法ReleaseManagedResources()
和ReleaseUnmanagedResources()
. 所以这里是代码: