で開いた画像の削除に問題がありましたPictureBox
。Hans Passant
彼が提案したこのスニペットを使用して、この問題の解決策を得ました。
using (var temp = new Bitmap(openFileDialog1.FileName))
{
pictureBox1.Image = new Bitmap(temp);
}
コードをクラッシュさせようとしましたが、できなかったので動作しているように見えますが、このコードの背後にあるロジックがよくわかりません。私がやっていた前に:
if (MyImage != null)
{
MyImage.Dispose();
}
...
MyImage = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = (Image)MyImage;
非常にまれでさえ、 で問題を引き起こしましたresource being used
。
私が使用している新しいコードでこれが起こらないのはなぜですか。カバーの下で何が起こっているのかを理解するために、これを尋ねます。が呼び出されることをusing
保証しますが、前のコードでも呼び出されます。ほとんどの場合、リソースは十分に速く解放されますが、新しいコードが常に十分に速くイメージを解放できるようにする大きな違いは何ですか?Dispose()
Disposed()