C# 从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

我正在将图像缩略图成功加载到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.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);
}