私はと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();
}
この問題に対処しますが、それでも時々発生します。そして、それが常に重要であるとは限らないので、ある時点で私はそれを解決したと判断するかもしれませんが、実際にはしばらくの間幸運であるため、それに対処することがさらに重要です。