gpt4 book ai didi

C# 无法删除以前在窗口中打开的 pdf

转载 作者:行者123 更新时间:2023-11-30 22:51:47 26 4
gpt4 key购买 nike

我有一个在窗口中打开的 PDF 文件。窗口关闭,然后我尝试删除文件并收到正在使用的错误。它不应该再上锁,因为打开它的 window 已经关闭。任何建议将不胜感激。

我有一个本地变量 _window

private Window _window;

我有以下代码可以在窗口中打开 PDF

_window = new Window
{
Title = "PDF Viewer",
Content = new WebBrowserView(),
DataContext = new WebBrowserViewModel
{
Uri = _pdfPathFull
},
IsEnabled = false
};

_window.Show();

窗口关闭如下

private void ClosePDF()
{
if (_window != null)
{
window.DataContext = new WebBrowserViewModel
{
Uri = "about:blank"
};
_window.Close();
_window = null;
}
}

我有以下代码试图删除在窗口中打开的文件,它总是失败并显示错误“进程无法访问文件\\ServerName\FileName.pdf,因为它正被另一个进程使用。 "

ClosePDF();

bool fileDeleted = false;
int tryCount = 0;

FileInfo targetFile = new FileInfo(_pdfPathFull);
while (!fileDeleted && tryCount <= 50)
{
System.Threading.Thread.Sleep(500);
try
{
targetFile.Delete();
fileDeleted = true;
}
catch(Exception ex)
{
if (tryCount == 50)
throw (ex);
}
tryCount++;
}

这是 WebBrowserViewModel 的定义。这是所有遗留代码,我只是被要求添加删除功能。

public class WebBrowserViewModel : AppViewModel
{
private string _uri = string.Empty;

public WebBrowserViewModel()
{

}

public string Uri
{
get { return _uri; }
set { Set("Uri", ref _uri, value); }
}
}

最佳答案

我认为问题出在这里:

这样做:

DataContext = new WebBrowserViewModel
{
Uri = _pdfPathFull
},

在内存中创建一个对象,即使 DataContext 设置为“about:blank”,该对象也会继续保存 pdf 的引用

我建议取一个引用变量并改用它。确保在窗口关闭后取消引用它。确保 Window 对象也从调用函数中清除。

这就是我更新代码的方式:

添加一个新的私有(private)变量:

private Window _window;
private FrameworkElement _fwElement;

下一组更改:

_fwElement = new FrameworkElement();
_fwElement.DataContext = new WebBrowserViewModel { Uri = _pdfPathFull };
_window = new Window
{
Title = "PDF Viewer",
Content = new WebBrowserView(),
DataContext = _fwElement.DataContext,
IsEnabled = false
};

_window.Show();

现在当我们关闭窗口时:

private void ClosePDF()
{
if (_window != null)
{
if(_fwElement != null)
{
_fwElement.DataContext = null;

}
window.DataContext = new WebBrowserViewModel
{
Uri = "about:blank"
};
_fwElement = null;
_window.Close();
_window = null;
GC.Collect();
}
}

关于C# 无法删除以前在窗口中打开的 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58841902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com