确定过程是否完成?

时间:2016-03-11 19:17:10

标签: vb.net process

背景

我正在考虑如何逻辑地判断流程是否完整。我目前有一个单独的程序,生成一个文本文件,其名称为"信息"为它的标题栏。当出现信息文本文件时,程序正在向其转储一大堆数据。这可能需要几秒钟或几秒钟,具体取决于数据。基本上我正在考虑最好的方式来告诉我该文件何时完成。请记住,当我说文本文件时,它与记事本不同,因为它没有物理文件位置。它只是生成它的程序的一部分。

以下是我目前的情况:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function

Dim proc As Integer
    Do Until proc <> 0
        proc = FindWindow(vbNullString, "Information")
    Loop

我在想我可以使用进程ID并确定它正在使用多少CPU ..如果它很高则该进程当前正在使用,如果低则则完成。上面的代码找到这个过程没有问题。

这是判断它是否完成的好方法吗?如果是,我如何根据进程ID确定CPU使用率?可能有比我想象的更好的方法。

2 个答案:

答案 0 :(得分:0)

Process[] processes = Process.GetProcessesByName("ProcessName")
process = processes[0]
    process.WaitForExit()

但这会冻结程序直到完成处理。 所以将背景工作者纳入Ayush说。

Private Sub StartButton_Click(ByVal sender As System.Object, _
                                  ByVal e As System.EventArgs) _
                              Handles StartButton.Click

    BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, _
                                     ByVal e As System.ComponentModel.DoWorkEventArgs) _
                                    Handles BackgroundWorker1.DoWork

    Process[] processes = Process.GetProcessesByName("ProcessName")
    process = processes[0]
    process.WaitForExit()

&#34;您可以在此处输入一些代码,用于完成或低于此方法。

End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, _
          ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
          Handles BackgroundWorker1.RunWorkerCompleted

&#34;这将在bw完成时被调用

End Sub

答案 1 :(得分:-1)

您可以在Visual Basic中使用B​​ackgroundWorker控件,它有一个名为“Run Worker Completed”的事件,当任务成功,失败或取消时将引发该事件。