SST*_*SST 2 wpf file-io ioexception c#-4.0
我正在使用以下代码在我的wpf应用中显示一些图像:
<Image Source="{Binding Path=TemplateImagePath, Mode=TwoWay}" Grid.Row="3" Grid.Column="2" Width="400" Height="200"/>
Run Code Online (Sandbox Code Playgroud)
并通过浏览某个目录在代码隐藏的构造函数中设置它的绑定属性,下面是代码:
DirectoryInfo Dir = new DirectoryInfo(@"D:/Template");
if (Dir.Exists)
{
if (Dir.GetFiles().Count() > 0)
{
foreach (FileInfo item in Dir.GetFiles())
{
TemplateImagePath = item.FullName;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果用户上传了一些其他图像,那么我需要删除这个旧图像,这是我按照以下方式进行并将图像绑定设置为null:
DirectoryInfo Dir = new DirectoryInfo(@"D:/Template");
if (Dir.Exists)
{
if (Dir.GetFiles().Count() > 0)
{
foreach (FileInfo item in Dir.GetFiles())
{
TemplateImagePath= null;
File.Delete(item.FullName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到的异常是无法删除某些其他进程使用的文件.我该如何删除它?
为了能够在ImageControl中显示图像时删除图像,您必须创建一个设置了BitmapCacheOption.OnLoad的新BitmapImage或BitmapFrame对象.然后立即从文件加载位图,之后文件不会被锁定.
将您的属性更改string TemplateImagePath为ImageSource TemplateImage并绑定如下:
<Image Source="{Binding TemplateImage}"/>
Run Code Online (Sandbox Code Playgroud)
TemplateImage像这样设置属性:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(item.FullName);
image.EndInit();
TemplateImage = image;
Run Code Online (Sandbox Code Playgroud)
或这个:
TemplateImage = BitmapFrame.Create(
new Uri(item.FullName),
BitmapCreateOptions.None,
BitmapCacheOption.OnLoad);
Run Code Online (Sandbox Code Playgroud)
如果要保持绑定到TemplateImagePath属性,可以使用绑定转换器将字符串转换为ImageSource,如上所示.
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |