3

我正在为我工​​作的公司编写一个 C# 程序,它将启动一个 PHP 脚本,该脚本创建一个 PDF,然后打开 PDF 文件。现在,我有:

// launch the PHP page to generate my pdf report
Process.Start(phpFile);

// wait for the report to exist
Thread.Sleep(waitTime);

// open the report
Process.Start(filePath);

现在,我不是整个“Sleep()在指定时间内希望文件完成后存在”的粉丝。所以我的问题是,使用do循环是否可行/更好:

do
{
    // Do nothing until the file exists 
} while (!File.Exists(filePath));
4

5 回答 5

8

为什么不使用FileSystemWatcher

设置PathFilter属性并订阅Created事件。

于 2012-09-20T14:29:17.583 回答
6

使用的问题File.Exists是文件可能在第一个进程完成写入之前就已经存在。我会做这样的事情:

// launch the PHP page to generate my pdf report
Process generator = Process.Start(phpFile);

// wait for the report to exist
generator.WaitForExit();

// open the report
Process.Start(filePath);
于 2012-09-20T14:30:46.510 回答
4

使用FileSystemWatcher并处理创建的事件。如果您希望它FileSystemWatcher.WaitForChanged与超时同步使用

于 2012-09-20T14:30:25.217 回答
0

我认为查看文件是否以任何方式存在是一种更好的方法。如果您依赖固定的时间量,它可能会失败,或者该过程将等待超过它需要的时间。

于 2012-09-20T14:31:33.147 回答
0

等待第一个过程结束怎么办?

Process p = Process.Start(phpFile);
p.WaitForExit();

Process.Start(filePath);
于 2012-09-20T14:55:21.767 回答