我有一个OpenFileDialog
和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();
}
将处理此问题,但有时仍会发生。而且因为不是每次都更重要的是要处理它,因为在某些时候我可能会决定我已经解决了它,但实际上只是幸运一段时间。