我在用戶控件有一個OpenFileDialog
和PictureBox
。爲了更好地理解這個問題,我會用幾句話來解釋這個用戶控件是如何工作的。用戶可以選擇要爲表單打開的圖像。該圖像的名稱保存在數據庫中,圖像的文件被複制到默認位置。當數據庫中保存了一些圖像時,當帶有圖片框控件的表單被加載時,它將被加載到圖片框中。如果用戶選擇另一個圖像並希望用新圖像保存表單,我有一種方法可以從我的默認位置刪除舊圖像文件,這就是問題發生的地方。.NET PictureBox的 - 如何確保資源被釋放
當我加載圖像,並嘗試保存新的,有時(事實上非常罕見),我得到一個錯誤The resource is being used by another process..
如果需要,我可以粘貼確切的錯誤。我認爲這個問題是由於圖片盒和處理圖片的方式造成的。
這裏是我的代碼:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if (MyImage != null)
{
MyImage.Dispose();
}
selectedFile = openFileDialog1.FileName;
selectedFileName = openFileDialog1.SafeFileName;
MyImage = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = (Image)MyImage;
int imageWidth = pictureBox1.Image.Width;
int picBoxWidth = pictureBox1.Width;
if (imageWidth != 0 && picBoxWidth > imageWidth)
{
pictureBox1.Width = imageWidth;
}
else
{
pictureBox1.Width = defaultPicBoxWidth;
}
}
catch (Exception ex)
{
logger.Error(ex.ToString());
MessageBox.Show("Error loading image!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
和我的刪除方法:
public void DeleteImage(AppConfig imageInfo, string imageName)
{
string imgPath = imageInfo.ConfigValue.ToString();
try
{
File.Delete(imgPath + "\\" + imageName);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我認爲:
if (MyImage != null)
{
MyImage.Dispose();
}
會處理這個問題,但還是有時會發生。而且因爲不是每次都要處理它,因爲在某些時候我可能會認爲我已經解決了這個問題,但實際上只是在一段時間內幸運的。
謝謝,我很驚訝,這個問題沒有標準的解決方案。這似乎是許多人使用'PictureBox'的問題。 – Leron 2013-03-07 15:24:23