我试图删除一个图像,一旦它被拖放到Windows窗体上。以下是我处理拖放的方法:
private void OnDrop(object sender, DragEventArgs e)
{
var paths = (string[])e.Data.GetData(DataFormats.FileDrop);
Bitmap bm = new Bitmap(paths[0]);
var newPath = paths[0].Substring(paths[0].LastIndexOf("\\") + 1);
bm.Save(newPath);
pictureEdit1.Image = new Bitmap(newPath);
}
private void OnDragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
}
如果我尝试从Windows资源管理器中删除原始图像,我会得到"此文件正在使用"错误。我曾尝试在bm
位图上调用Dispose,但这似乎没有帮助。
编辑:为了澄清,当我调用Dispose时,我在bm.Save(newPath
部分之后立即调用它,但仍然给出了我提到的错误。
答案 0 :(得分:1)
尝试将位图包装在如下所示的使用块中。
private void OnDrop(object sender, DragEventArgs e)
{
var paths = (string[])e.Data.GetData(DataFormats.FileDrop);
using(var bm = new Bitmap(paths[0]))
{
var newPath = paths[0].Substring(paths[0].LastIndexOf("\\") + 1);
bm.Save(newPath);
}
// using block is all done, handle should be released. delete that bad boy.
File.Delete(paths[0]);
pictureEdit1.Image = new Bitmap(newPath);
}
答案 1 :(得分:0)
这对VS来说是个打嗝。我重新添加了Dispose
逻辑并得到了同样的错误。最后我关闭VS并重新启动它,再次尝试并且它有效。