3

私が働いている会社のC#プログラムを書いています。このプログラムは、PDFを作成するPHPスクリプトを起動し、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を使用しないのはなぜですか?

PathプロパティとFilterプロパティを設定し、 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 に答える