2016-04-18 4 views
2

はその後、bmp1は適切PictureBoxによって処分されるか、私はbmp2Imageを変更するとbmp1とそれのDisposeへの参照を保持する必要がありますか?画像が別のビットマップに設定されたら、PictureBoxのビットマップはどうなりますか?私はいくつか<code>Bitmap bmp1</code>を持っており、この<code>bmp1</code>に<code>PictureBox.Image</code>を設定した場合はいつか、後で<code>Bitmap bmp2</code>に設定

答えて

4

PictureBoxは、画像を廃棄するかどうかを知ることはできません。アプリ内の他の場所で使用している可能性があります。したがって、それは明示的にDisposeではありません。 PictureBoxが最後の参照を保持している場合は、ガベージコレクションの対象となり、確定処理の一部としてDisposeが呼び出されますが、そのときはガベージコレクタになります。その間、未だ提供されていないBitmapは管理されていないリソースを消費しており、ソースファイルを変更できないようにストリームを開いている可能性が高いため、「いつでも」悪い習慣を守るようにします。

あなたはあなたに何PictureBox.Imageポイントを変更する際にBitmapで行われている知っている場合は、古いものを処分すると設定が完了し、右そこに余分なカップルの行を追加します。

Image tmp = myPictureBox.Image; 
myPictureBox.Image = newImage; 
if (tmp != null) 
{ 
    tmp.Dispose(); 
} 
+0

この私が疑ったものです、ありがとうございます。 – KDecker