从并行任务问题更新图像文件
本文关键字:图像 文件 更新 问题 并行任务 | 更新日期: 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
将拒绝删除正在使用的文件。