C# 在C中使用线程删除文件#

C# 在C中使用线程删除文件#,c#,multithreading,pdf-reader,C#,Multithreading,Pdf Reader,我的线程无法删除PDF文件。调试此解决方案时,文件正在删除。在服务模式下,它不会删除 这是我的示例代码: Thread Worker = new Thread(new ThreadStart(Start)); //Main Function Worker.Start(); public void Start() { string text=PDFToText(@"C:\1.pdf"); File.Delete(@"C:\1.pdf"); } private string PD

我的线程无法删除PDF文件。调试此解决方案时,文件正在删除。在服务模式下,它不会删除

这是我的示例代码:

Thread Worker = new Thread(new ThreadStart(Start)); //Main Function
Worker.Start();

public void Start()
{
    string text=PDFToText(@"C:\1.pdf");
    File.Delete(@"C:\1.pdf");
}

private string PDFToText(string filename) // My PDF reader function
{
    PDDocument doc = PDDocument.load(filename);
    PDFTextStripper stripper = new PDFTextStripper();
    string text = stripper.getText(doc);
    doc.close();
    return text;
}

问题出在哪里?

可能发生的情况是某些东西(可能是您正在使用的API)锁定了文件,从而阻止了删除

当您在debug和step-through中执行此操作时,因为您以“缓慢”的速度执行此操作,锁已被释放,文件已成功删除

您应该将删除代码放入带有异常处理程序的重试循环中,该异常处理程序会休眠一秒钟左右,然后重试,从而使操作系统有机会放弃锁


另一个要考虑的问题是,假设在生产中运行这个服务时,该服务在不同的用户帐户下运行,而不是通过VisualStudio调试它时(假设您不附加到服务-这里很难说)。首先检查运行服务的帐户是否具有删除文件的权限。

是否有异常或其他情况?否。我没有异常…引发了什么异常?我想这不是使用线程删除文件的错误,但是当线程调用该文件时,该文件当前正在使用中。能否添加一条Catch异常消息以查看是否发生错误?