C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: リソース解放


(過去ログ 93 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■55307 / inTopicNo.1)  リソース解放
  
□投稿者/ あんず (1回)-(2010/11/26(Fri) 09:48:27)

分類:[.NET 全般] 

はじめまして。
作成したシステムで「ウィンドウのハンドルを作成中にエラーが発生しました。」
というエラーが出ました。showDialogでフォームを表示する箇所です。
調べた結果、リソースの解放がなされていないらしいことが分かりました。
事実、タスクマネージャで見てみるとハンドル数が減少せずに増え続けていました。
disposeや、GC.collectなどでも解決に至りませんでした。
お力をお貸しください。
以下ソースです。

'画面表示
Dim form1 As New form1(Me)
Dim dr As DialogResult = form1.ShowDialog()
If dr.Equals(Windows.Forms.DialogResult.OK) Then
Else
End If

このあとにDispose等しても効果なしでした。

引用返信 編集キー/
■55309 / inTopicNo.2)  Re[1]: リソース解放
□投稿者/ shu (200回)-(2010/11/26(Fri) 09:59:30)
No55307 (あんず さん) に返信
> Dim form1 As New form1(Me)
この中に何か問題があるとしたらここですかね。

他の箇所にも問題がないか確認した方がいいです。
引用返信 編集キー/
■55310 / inTopicNo.3)  Re[1]: リソース解放
□投稿者/ 魔界の仮面弁士 (1958回)-(2010/11/26(Fri) 11:21:07)
半角カナの利用は避けてください。

■No55307 (あんず さん) に返信
> Dim form1 As New form1(Me)
・クラス名と変数名を同じ名前にする事は避けましょう。
 実行には問題が無いとしても、混乱の元です。 

・Form に、引数1個を受け取るコンストラクタはありませんので、
 おそらく、独自の Sub New を作っているのだとは思いますが、
 その中の処理はどのようになっていますか?

> Dim dr As DialogResult = form1.ShowDialog()
本来は、使い終わった Form に対して Dispose が必要です。

Show で表示している場合は、フォームが閉じられた時に、自動的に Dispose されますが、
ShowDialog で Form を表示する場合は、Using を使った方が望ましいです。

http://msdn.microsoft.com/ja-jp/library/c7ykbedk.aspx
》 ダイアログ ボックスとして表示されているフォームは
》 Close メソッドで閉じられることはないため、
》 フォームがアプリケーションで不要になった場合は、
》 そのフォームの Dispose メソッドを呼び出す必要があります。 


> If dr.Equals(Windows.Forms.DialogResult.OK) Then
Equals メソッドではなく、= 演算子を使いましょう。

Equals メソッドの場合、引数の型が Object なので、
コンパイル時に型判定が行われません。処理結果は同一ですが、
タイプセーフを保証するためにも、= を使った方が望ましいかと。


> このあとにDispose等しても効果なしでした。

・ダイアログ内で、Control.Add / Remove を動的に行っていますか?
 → Controls に登録されているものは、フォームと一緒に Dispose されますが、
  自分で Remove した場合は、削除された Contol を手動で Dispose する必要があります。

・ダイアログ内で、Component を利用していますか? (Timer など)
 → デザイナで貼り付けた場合は、自動的に Container に登録されるため、
  最後にはフォームと一緒に Dispose されますが、components に
  登録していない場合には、自分で Dispose する必要があります。

引用返信 編集キー/
■55615 / inTopicNo.4)  Re[2]: リソース解放
□投稿者/ あんず (2回)-(2010/12/07(Tue) 15:51:44)
返信が遅くなり申し訳ありません。
ダイアログ内での動作を検証していて、
ダイアログのコントロールをすべて削除して(戻るボタンのみ残して)
動かしましたが結果が変わりませんでした。
ということは親フォームに問題があるということでしょうか?
引用返信 編集キー/
■55623 / inTopicNo.5)  Re[3]: リソース解放
□投稿者/ shu (253回)-(2010/12/07(Tue) 20:46:57)
No55615 (あんず さん) に返信
> 返信が遅くなり申し訳ありません。
> ダイアログ内での動作を検証していて、
> ダイアログのコントロールをすべて削除して(戻るボタンのみ残して)
> 動かしましたが結果が変わりませんでした。
> ということは親フォームに問題があるということでしょうか?
そうしたらバックアップしておいて順次コードを削ってエラーの原因箇所を狭めていってはどうでしょう?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -