背景
我正在考虑如何逻辑地判断流程是否完整。我目前有一个单独的程序,生成一个文本文件,其名称为"信息"为它的标题栏。当出现信息文本文件时,程序正在向其转储一大堆数据。这可能需要几秒钟或几秒钟,具体取决于数据。基本上我正在考虑最好的方式来告诉我该文件何时完成。请记住,当我说文本文件时,它与记事本不同,因为它没有物理文件位置。它只是生成它的程序的一部分。
以下是我目前的情况:
<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使用率?可能有比我想象的更好的方法。
答案 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中使用BackgroundWorker控件,它有一个名为“Run Worker Completed”的事件,当任务成功,失败或取消时将引发该事件。