5

次のコード行に進む前に、プロセスを一時停止するか、プロセスが完了するまで待機する方法はありますか?

すべてのPDFを圧縮してから削除する現在のプロセスは次のとおりです。現在、圧縮が完了する前にファイルを削除しています。プロセスが完了するまで一時停止/待機する方法はありますか?

    Dim psInfo As New System.Diagnostics.ProcessStartInfo("C:\Program Files\7-Zip\7z.exe ", Arg1 + ZipFileName + PathToPDFs)
    psInfo.WindowStyle = ProcessWindowStyle.Hidden
    System.Diagnostics.Process.Start(psInfo)

    'delete remaining pdfs
    For Each foundFile As String In My.Computer.FileSystem.GetFiles("C:\Temp\", FileIO.SearchOption.SearchAllSubDirectories, "*.pdf")
        File.Delete(foundFile)
    Next
4

3 に答える 3

14

Process.StartはProcessインスタンスを返します。他の人が述べたように、WaitForExit()メソッドを使用できますが、おそらく、圧縮プロセスで問題が発生した場合に備えてタイムアウトを含むWaitForExit(Integer)を使用する必要があります。

したがって、コードは次のようになります。

...
Dim zipper As System.Diagnostics.Process = System.Diagnostics.Process.Start(psInfo)
Dim timeout As Integer = 60000 '1 minute in milliseconds

If Not zipper.WaitForExit(timeout) Then
    'Something went wrong with the zipping process; we waited longer than a minute
Else
    'delete remaining pdfs
    ...
End If
于 2012-09-26T14:02:07.217 に答える
10

あなたはprocess.WaitForExit方法を使うことができます

WaitForExitは、関連するプロセスが終了するまで現在のスレッドを待機させることができます。

リンク: http: //msdn.microsoft.com/fr-fr/library/system.diagnostics.process.waitforexit (v = vs.80).aspx

于 2012-09-26T13:53:14.643 に答える
4

利用可能なWaitForExitメソッドがいくつかあります。

Process.WaitForExitを確認してください。

WaitForExit()関連するプロセスが終了するまで、現在のスレッドを待機させます。プロセスで他のすべてのメソッドが呼び出された後に呼び出す必要があります。現在のスレッドのブロックを回避するには、 Exitedイベントを使用します。

  • 関連するプロセスが終了するまで無期限に待機するようにプロセスコンポーネントに指示します。

WaitForExit(Int32)関連するプロセスが終了するまで、現在のスレッドを待機させます。プロセスで他のすべてのメソッドが呼び出された後に呼び出す必要があります。現在のスレッドのブロックを回避するには、Exitedイベントを使用します。

  • 関連するプロセスが終了するまで、指定されたミリ秒数待機するようにプロセスコンポーネントに指示します。
于 2012-09-26T13:53:42.307 に答える