在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请问要删图片如何关闭进程
在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请问要删图片,知道这张图片的名字如何关闭使用这张图片的进程
[解决办法]
你PictureBox里还使用着这张图片呢,你怎么能删除,当然又处于被独占状态。
先将PictureBox控件里图片清空,然后才可以删除的。
[解决办法]
做一个项目的时候,用到了图片的操作,当用Picturebox显示图片时是用的
Image.FromFile(ImageRul);这个方法来显示图片的,
如果这时想把图片给删除的话,会报错,提示该图片正在使用中,
后来找到一个方法,就是将该图片以流的方式加载进来,然后在赋给Picturebox,这样不存在删除的时候报错了。
调用的时候用:
Image.FromStream(ByteToStream(SetImageToByteArray(ImageUrl)));
下面是封装好的方法:
#region 将文件转换成流
//public byte[] SetImageToByteArray(string fileName, ref string fileSize)
/// <summary>
/// 将文件转换成流
/// </summary>
/// <param name="fileName">文件全路径</param>
/// <returns></returns>
public byte[] SetImageToByteArray(string fileName)
{
byte[] image = null;
try
{
FileStream fs = new FileStream(fileName, FileMode.Open);
FileInfo fileInfo = new FileInfo(fileName);
//fileSize = Convert.ToDecimal(fileInfo.Length / 1024).ToString("f2") + " K";
int streamLength = (int)fs.Length;
image = new byte[streamLength];
fs.Read(image, 0, streamLength);
fs.Close();
return image;
}
catch
{
return image;
}
}
#endregion
#region 将byte转换成MemoryStream类型
/// <summary>
/// 将byte转换成MemoryStream类型
/// </summary>
/// <param name="mybyte">byte[]变量</param>
/// <returns></returns>
public MemoryStream ByteToStream(byte[] mybyte)
{
MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
return mymemorystream;
}
#endregion
#region 将byte转换成Image文件
/// <summary>
/// 将byte转换成Image文件
/// </summary>
/// <param name="mybyte">byte[]变量</param>
/// <returns></returns>
public Image SetByteToImage(byte[] mybyte)
{
Image image;
MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
image = Image.FromStream(mymemorystream);
return image;
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
return;
var filename = openFileDialog1.FileName;
if (!File.Exists(filename))
return;
this.pictureBox1.Image = Image.FromFile(filename);
}
private void button2_Click(object sender, EventArgs e)
{
var filename = openFileDialog1.FileName;
if (!File.Exists(filename))
return;
var name = Path.GetFileNameWithoutExtension(filename);
var newName = name + "_" + Guid.NewGuid().ToString("n");
var ext = Path.GetExtension(filename);
newName = Path.Combine(Path.GetDirectoryName(filename), newName);
this.pictureBox1.Image.Dispose();
this.pictureBox1.Image = null;
//File.Move(filename, newName + ext);
File.Delete(filename);
}