2009-07-09 22 views
3

実行時に動的にTabPagesを追加するWinForms TabControlがあります。各タブページには、Webブラウザーコントロールが含まれています。私はまた、実行時にタブページを削除する機能を持っています。動的に作成されたコントロールを廃棄する

TabPageおよび/またはWebブラウザコントロールをDispose()する必要がありますか?

WebBrowserコントロールはリソースホッグのビットであるため、私は少なくともDispose()する必要があります。

答えて

2

タブページを削除すると、削除する必要があります。これにより、すべての子コントロールが自動的に破棄されます。詳細について

Control.Disposeのドキュメントを参照してください。

は、コントロールとその子コントロールによって使用されているアンマネージリソースを解放し、オプションでマネージリソースを解放します。

タブページのdisposeは、すべての子コントロールを破棄します。

+0

は、私はこのようなコードの単純なビット... webBrowserTabControl.TabPages.Remove(タブページ)と一緒に行きました。 tabPage.Dispose(); TabPageコントロールとWebBrowserコントロールの両方がうまく機能しているように見えます。 ありがとうございました! –

2

IDisposableを実装するすべてのものにDisposeを呼び出す必要があります。これがIDisposableを実装する目的です。

1

Dispose()を明示的に呼び出すと、一般にDispose()が呼び出されない場合よりも速くクリーンアップされます。リソースが不安定であるか、またはオブジェクトが不足している、または需要が高い他のリソースを保持している場合は、Dispose()を明示的に呼び出すことをお勧めします。

このCodeProjectの記事は、人々がDisposeパターンを正しく理解できるように、そしてDisposeがすべてについて理解するのを助けるために、いつもお勧めします。 http://www.codeproject.com/KB/cs/idisposable.aspx

+0

ガベージコレクションはDisposeを呼び出すのと同じではありません。 Disposeは常に呼び出されることは保証されておらず、クラスがGCが収集しないリソースを使用しているため、通常は実装されているため、明示的に呼び出す必要があります。 –

+1

@Ed:それはやや真実です。設計ガイドラインに正しく従う場合、非管理リソースを解放するためにdisposeを必要とするオブジェクトは、GCがオブジェクトをファイナライズするときにこれを行うファイナライザも提供する必要があります。しかし、コンポーネントライターが正しく動作するようにするためには、信頼する必要があります。詳細については、IDisposableの私のブログエントリーを参照してください:http://reedcopsey.com/?p=5私はこれについて詳しく説明します。 –

+0

それは本当です、私はファイナライザを忘れました:-) –

関連する問題