从并行任务问题更新图像文件

本文关键字:图像 文件 更新 问题 并行任务 | 更新日期: 2023-09-27 18:27:36

我使用此代码来填充WPF图像控件。

string pathToImage = System.IO.Path.Combine(Settings.ContentFolderPath, file);
Image image = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri(pathToImage, UriKind.Absolute);
src.EndInit();
double ratio = src.Width / src.Height;
image.Source = src;
image.Stretch = Stretch.Uniform;
image.Height = marquee1.Height;
image.Width = marquee1.Height * ratio;
lstItems.Items.Add(image);

此外,我有一些并行的Task来更新此图像文件

但当我试图删除它时,我会收到错误:文件正忙于其他进程,您无法删除此文件

如何解决这个问题?

谢谢!


更新

所以,谢谢你们所有人!

最终解决方案需要实施

src.CacheOption = BitmapCacheOption.OnLoad;
src.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

工作代码看起来像

Image image = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.CacheOption = BitmapCacheOption.OnLoad;
src.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
src.UriSource = new Uri(pathToImage, UriKind.Absolute);
src.EndInit();
double ratio = src.Width / src.Height;
image.Source = src;
image.Stretch = Stretch.Uniform;
image.Height = marquee1.Height;
image.Width = marquee1.Height * ratio;
lstItems.Items.Add(image);
result = image.Width;

从并行任务问题更新图像文件

MSND BitmapImage.CacheOption表示:

将CacheOption设置为BitmapCacheOption。如果要关闭用于创建BitmapImage的流。

BitmapImage.CacheOption设置为OnLoad:

BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri(pathToImage, UriKind.Absolute);
src.CacheOption = BitmapCacheOption.OnLoad;
src.EndInit();

将BitmapImage的CacheOption属性设置为BitmapCacheOption.OnLoad。这将导致它将图像加载到内存中并关闭原始文件,这将允许您删除它。

此外,我还有一些并行任务来更新这个图像文件。。。当我试图删除它时,我得到了错误

一般情况下,当进程正在使用Windows文件时,您不能删除该文件。消费者Windows常见问题解答包括此页面来描述此限制。正如MSDN所描述的,File.Delete将拒绝删除正在使用的文件。