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事件。

  • 指示 Process 组件无限期地等待关联的进程退出。

WaitForExit(Int32)使当前线程等待,直到关联的进程终止。应该在进程上调用所有其他方法之后调用它。为避免阻塞当前线程,请使用 Exited 事件。

  • 指示 Process 组件等待指定的毫秒数,以使关联的进程退出。
于 2012-09-26T13:53:42.307 回答