【发布时间】:2021-07-18 06:50:29
【问题描述】:
我正在使用以下代码来了解如何在进程处于活动状态时等待它结束。
在我的代码中,就在记事本打开时,我看到了 MessageBox。
如何等到记事本关闭而不让我的表单无响应?
Public Class Form1
Private Const WAIT_INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long,
ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long,
ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim hProcess As Long
Dim taskId As Long
Dim cmdline As String
cmdline = "notepad.exe"
taskId = Shell(cmdline, vbNormalFocus)
hProcess = OpenProcess(SYNCHRONIZE, True, taskId)
Call WaitForSingleObject(hProcess, WAIT_INFINITE)
CloseHandle(hProcess)
MsgBox ("The shelled app has ended.")
End Sub
End Class
【问题讨论】:
-
您必须这样做还是更简单地使用
System.Diagnostics.Process的实例而不是Await proc.WaitForExitAsync()? -
感谢您的评论!但这肯定没有按预期工作。请您发布一个演示 WaitForExitAsync 的示例代码吗?
-
既然是“用代码理解等待过程”,能不能暂时把记事本执行代码注释掉?另外,您是否尝试过使用 Visual Studio 调试运行此 VB.NET 代码?
标签: vb.net winforms winapi process waitforsingleobject