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

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

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

Re[2]: pictureboxでの画像表示について


(過去ログ 56 を表示中)

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

■31978 / inTopicNo.1)  pictureboxでの画像表示について
  
□投稿者/ マジョラム (8回)-(2009/01/30(Fri) 15:58:30)

分類:[VB.NET/VB2005 以降] 

2009/01/30(Fri) 15:58:56 編集(投稿者)
pictureboxで画像表示させたいと思い、以下のソースのように
フォームロード時にpictureboxのimageプロパティにビットマップファイルを指定しました。

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim pic As PictureBox
        pic = PictureBox1
        pic.Image = Image.FromFile("test.bmp")
    End Sub

しかし、このForm2を閉じた後でも排他ロックが掛かったままで、この親フォームであるForm1を閉じて、
アプリケーションが終了した段階で排他ロックが解除されます。

このような記述は好ましくないのでしょうか?
ちなみに、VB2003です。

引用返信 編集キー/
■31983 / inTopicNo.2)  Re[1]: pictureboxでの画像表示について
□投稿者/ やじゅ (921回)-(2009/01/30(Fri) 16:22:32)
やじゅ さんの Web サイト
No31978 (マジョラム さん) に返信
> しかし、このForm2を閉じた後でも排他ロックが掛かったままで、この親フォームであるForm1を閉じて、

この動作は仕様です。

この問題を回避するには、FileStream オブジェクトを使用します。
PictureBox の Image プロパティにファイルを設定するとイメージ ファイルがロックされる
http://support.microsoft.com/kb/309482/ja
引用返信 編集キー/
■31984 / inTopicNo.3)  Re[1]: pictureboxでの画像表示について
□投稿者/ Hongliang (337回)-(2009/01/30(Fri) 16:27:01)
好ましいかどうかは作成者次第なのでなんとも。

FromFile で Bitmap を生成した場合、この Bitmap を Dispose するまでファイルはロックされます。
PictureBox は自分の親コントロール(この場合は Form2 ですかね)が Dispose される(Form は Show で表示した場合 Close したときに Dispose も行われます)ときついでに Dispose されますが、このとき Image プロパティに設定されている Image は Dispose されません。
なんでかっていうと、他に誰がその Image を利用しているか知る術が無いからです。勝手に Dispose してしまっては他に誰かがその Image を使用していた場合残念なことになってしまいます。
// 最終的には Image が誰にも参照されなくなったあと、GC によって片付けられる過程でファイルのロックも解除されますが、そのタイミングを測ることはできません。アプリケーション終了までそのままかもしれません。

PictureBox が生きている間はロックしていて欲しいのなら、PictureBox の Disposed イベントとかで Image も Dispose するのがいいかもしれません。
そもそもロックして欲しくないってのならまた違う話になります。
引用返信 編集キー/
■31988 / inTopicNo.4)  Re[2]: pictureboxでの画像表示について
□投稿者/ マジョラム (9回)-(2009/01/30(Fri) 16:44:32)
なるほど、仕様なのですね。
分かりました。
FileStreamを使用するように変更します。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -