WPF:将图片绑定到网格会锁定它们

WPF:将图片绑定到网格会锁定它们,wpf,listview,backgroundworker,Wpf,Listview,Backgroundworker,我发现问题与问题几乎相同,但不是一个好答案: 我与backgroundworker一起下载了一些图片,并将它们设置在listview中,如下所示: void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { lsvHeros.Dispatcher.BeginInvoke(new Action(() => lsvHeros.ItemsSo

我发现问题与问题几乎相同,但不是一个好答案:

我与backgroundworker一起下载了一些图片,并将它们设置在listview中,如下所示:

    void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            lsvHeros.Dispatcher.BeginInvoke(new Action(() => lsvHeros.ItemsSource = null));
            _heros = CountersHandler.GetCounters(e.Argument.ToString());
        }
        catch (Exception ex)
        {
            _heros = new List<Hero>();
        }
    }
            <ListView x:Name="lsvHeros" Height="140"  Width="160">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="" Width="40">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Image Source="{Binding HeroIcon}" Width="24" Height="24"  />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn  Width="110" DisplayMemberBinding="{Binding HeroName}" Header="" />
                    </GridView>
                </ListView.View>
            </ListView>
问题是:即使我将itemssource设置为null,我下载的图片仍然被锁定。 这肯定是绑定的问题,因为当我不绑定它们时,我可以随时删除它们

事件如果我想手动删除te文件夹中的图片,它会告诉我它们已被其他进程锁定

那么,有没有合适的解决方案来解锁图片,以便我可以在重新运行程序时删除它们

谢谢你的回复

Müller Matthias

顺便说一句,我认为我如何下载这些文件并不重要。我基本上下载一个页面的整个html文本,搜索一些我知道的模式,然后下载。代码如下:

    private static Hero HandleCounter(string str)
    {
        const string IMG = @"img src=""";
        Hero result = new Hero();

        string picture = str.Substring(str.IndexOf(IMG) + IMG.Length);
        picture = picture.Substring(0, picture.IndexOf("png", 0) + 3);


        string file = Path.Combine(FileHandler.GetFilePath(ImagePath.Counters), Path.GetFileName(picture));

        File.Create(file).Dispose();

        using (WebClient client = new WebClient())
        {
            client.DownloadFile(picture, file);
        }
        result.HeroIcon = file;

        result.HeroName = Path.GetFileNameWithoutExtension(file).ToLower();
        result.HeroName = result.HeroName.Substring(0, 1).ToUpper() + result.HeroName.Substring(1);

        return result;
    }
GetFilePath为我获取一个本地路径:

    public  static string GetFilePath(ImagePath iP)
    {
        string result = Path.Combine(Directory.GetCurrentDirectory(), "Images", iP.ToString());
        if (!Directory.Exists(result))
            Directory.CreateDirectory(result);

        return result;
    }

由于这只是一个程序,我为我的乐趣,它显然不是很合适的编码。我为exmaple创建并删除了要经常使用的目录。

能否显示属性
on
代码以及您如何填充它?还请显示下载/保存文件的逻辑。你处理好所有资源了吗?我已经编辑了最上面的帖子。如前所述,如果我不将文件数据绑定,它将正常工作,因此我想这与它有关。
    public  static string GetFilePath(ImagePath iP)
    {
        string result = Path.Combine(Directory.GetCurrentDirectory(), "Images", iP.ToString());
        if (!Directory.Exists(result))
            Directory.CreateDirectory(result);

        return result;
    }