2012-07-31 85 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

相關問題