C# 从ListView控件中移动图像
我正在将图像缩略图成功加载到ListView控件中:C# 从ListView控件中移动图像,c#,image,file,listview,imagelist,C#,Image,File,Listview,Imagelist,我正在将图像缩略图成功加载到ListView控件中: lsvImageThumbs.Items.Clear(); imgl_ImageThumbs.Images.Clear(); string[] files = Directory.GetFiles(@"C:\Documents and Settings\Etc\Desktop\Test"); for (int indexFiles = 0; indexFiles < files.Len
lsvImageThumbs.Items.Clear();
imgl_ImageThumbs.Images.Clear();
string[] files = Directory.GetFiles(@"C:\Documents and Settings\Etc\Desktop\Test");
for (int indexFiles = 0; indexFiles < files.Length; indexFiles++)
{
Image img = Image.FromFile(files[indexFiles]);
DirectoryInfo dinfo = new DirectoryInfo(files[indexFiles]);
imgl_ImageThumbs.Images.Add(dinfo.Name, img);
lsvImageThumbs.Items.Add(files[indexFiles], dinfo.Name, indexFiles);
}
File.Copy可以正常工作,但对于File.Move,出现以下错误:
The process cannot access the file because it is being used by another process.
请注意,我也在MSDN论坛上回答了你同样的问题 Image.FromFile会锁定文件,直到图像被释放,这就是为什么会出现错误。您可以通过将文件复制到内存并在ImageList中使用副本来解决此问题 例如:
ImageList list = new ImageList();
Image diskImage = Image.FromFile("mypic.jpg");
Image memoryImage = new Bitmap(diskImage);
diskImage.Dispose(); // Releases the lock
list.Images.Add(memoryImage);
对代码的更改:
lsvImageThumbs.Items.Clear();
imgl_ImageThumbs.Images.Clear();
string[] files = Directory.GetFiles(@"C:\Documents and Settings\Etc\Desktop\Test");
for (int indexFiles = 0; indexFiles < files.Length; indexFiles++) {
Image img = Image.FromFile(files[indexFiles]);
// Create a copy of the image in memory
Image memImg = new Bitmap(img);
// Dispose of the original and release the file system lock
img.Dispose();
DirectoryInfo dinfo = new DirectoryInfo(files[indexFiles]);
// Updated this line to add memImg
imgl_ImageThumbs.Images.Add(dinfo.Name, memImg);
lsvImageThumbs.Items.Add(files[indexFiles], dinfo.Name, indexFiles);
}
lsvImageThumbs.Items.Clear();
imgl_imagesthumbs.Images.Clear();
string[]files=Directory.GetFiles(@“C:\Documents and Settings\Etc\Desktop\Test”);
对于(int indexFiles=0;indexFiles
您的File.Move现在应该可以工作了。如何避免锁定-@Nikolay,我想你是对的
lsvImageThumbs.Items.Clear();
imgl_ImageThumbs.Images.Clear();
string[] files = Directory.GetFiles(@"C:\Documents and Settings\Etc\Desktop\Test");
for (int indexFiles = 0; indexFiles < files.Length; indexFiles++) {
Image img = Image.FromFile(files[indexFiles]);
// Create a copy of the image in memory
Image memImg = new Bitmap(img);
// Dispose of the original and release the file system lock
img.Dispose();
DirectoryInfo dinfo = new DirectoryInfo(files[indexFiles]);
// Updated this line to add memImg
imgl_ImageThumbs.Images.Add(dinfo.Name, memImg);
lsvImageThumbs.Items.Add(files[indexFiles], dinfo.Name, indexFiles);
}