2012-07-31 105 views
0

我有一个第三方ActiveX控件,我将它嵌入到窗体中。控件的类实现IDisposable。我的问题是我应该在表单关闭事件中手动调用控件的dispose方法,或者进入设计器并编辑表单dispose方法来调用控件的dispose。在窗体上放置ActiveX控件

我知道窗体调用它拥有的所有控件的dispose方法,但是由于这是一个COM控件,是否有任何异常。谢谢。

PS:我使用Visual Studio 2008中,NET 3.5的,项目类型:Windows窗体应用程序

回答

0

没有,没有什么特别的,你必须做的。

由于Control class(从中其它容器控制从诸如Form继承)实现IDisposable interface,应该(如果它遵循标准IDisposable implementation guidelines)处理,它认为实现IDisposable接口的任何引用的。

也就是说,你的控制,假设它是在控制集合由Controls property曝光,将有它的IDisposable.Dispose method称为当包含它被关闭的窗口(如关闭窗口导致窗口的Dispose方法被调用)。

+0

感谢你使用这样的代码来处理你的对象 。我感到困惑,因为我在某个地方阅读经验法则时应该始终手动调用处理实现IDisposable的类。从你的答案中,我可以假设我不必担心控件的实现,实现IDisposable,并且是表单控件集合的一部分。 – swiftgp 2012-07-31 20:53:24

+0

@ user1556110不,如果您调用['Form'类的''Close'方法](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.close.aspx)(或者模拟X出窗口),或者处置一个'Control',它的父窗口中的所有控件都将被正确处理。 – casperOne 2012-07-31 21:16:05

+0

他说这是一个COM对象,所以你的答案对于发布COM对象或OleAutomation对象来说并不完全正确 – MethodMan 2012-07-31 23:19:55

1

MSDN Marshal.ReleaseComObject 为了释放或释放一个COM对象,你需要使用这个代码

System.Runtime.InteropServices.Marshal.ReleaseComObject(someComObject); 

//这是你的COM对象 例如调试处置不会对COM对象 工作,并尝试如果你有一个对象名为fs

((IDisposable)fs).Dispose(); 
+0

我已经释放我的其他COM对象这样,原因我的问题是它是一个ActiveX控件,我将它添加到COM选项卡的工具箱项目中。所以我仍然有点困惑。 – swiftgp 2012-08-01 15:02:01