我的应用程序在屏幕上显示图像(图像基于本地计算机上的文件),用户可以根据需要删除它们。
每次我尝试删除文件时,都会出现以下错误消息:
"The process cannot access the file 'C:\\Users\\Dave\\Desktop\\Duplicate\\Swim.JPG' because it is being used by another process."
我理解错误信息。
我有一个UserControl
接受文件路径(通过构造函数中的参数),然后将其绑定到它的 (UserControl) DataContext
。
作为调试此问题的一部分,我发现问题是由于在 UserControl 中设置 DataContext。如果我this.DataContext = this;
从我的 UserControl 中删除,那么我可以删除该文件。
所以,我的 TestUnit 看起来像
Ui.UserControls.ImageControl ic = new ImageControl(
@"C:\Users\Dave\Desktop\Duplicate\Swim.JPG");
try
{
File.Delete(@"C:\Users\Dave\Desktop\Duplicate\Swim.JPG");
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
用户控制代码隐藏
public ImageControl(string path)
{
this.FilePath = path;
this.DataContext = this; // removing this line allows me to delete the file!
InitializeComponent();
}
#region Properties
private string _filePath;
public string FilePath
{
get { return _filePath; }
set
{
_filePath = value;
OnPropertyChanged("FilePath");
}
}
如果重要,我的 UserControl XAML 正在使用绑定到“FilePath”的“Image”控件
我曾尝试在删除之前将 UserControl 设为 null,但这没有帮助。
我尝试将 IDisposible 接口添加到我的 UserControl 并在Dispose()
方法设置中this.DataContext = null;
,但这没有帮助。
我究竟做错了什么?如何删除此文件(或更准确地说,将其设为未使用)。