Запустить программу и ждать завершения, не вешая основной программы - VB
Формулировка задачи:
Мне нужно запустить программу и дождаться её завершение, после продолжить работу
Вот что я нашел, для реализации этого.
Код работает, но окно основной формы перестает перерисовываться. Возможно ничего страшного нет, но выглядит не красиво и кажется что всё повисло. Что поправить в коде или подскажите другой способ для реализации этой идеи ?
Листинг программы
- Private Type PROCESS_INFORMATION
- hProcess As Long
- hThread As Long
- dwProcessID As Long
- dwThreadID As Long
- End Type
- Private Type STARTUPINFO
- cb As Long
- lpReserved As String
- lpDesktop As String
- lpTitle As String
- dwX As Long
- dwY As Long
- dwXSize As Long
- dwYSize As Long
- dwXCountChars As Long
- dwYCountChars As Long
- dwFillAttribute As Long
- dwFlags As Long
- wShowWindow As Integer
- cbReserved2 As Integer
- lpReserved2 As Long
- hStdInput As Long
- hStdOutput As Long
- hStdError As Long
- End Type
- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, _
- ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
- ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
- ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
- lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) _
- As Long
- Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
- Private Const INFINITE = -1&
- Private Const NORMAL_PRIORITY_CLASS = &H20&
- Dim FileName As String
- Public Sub RunFile(FileName)
- Dim Process As PROCESS_INFORMATION
- Dim Prog As STARTUPINFO
- Prog.cb = Len(Prog)
- CreateProcessA 0&, FileName, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Prog, Process
- WaitForSingleObject Process.hProcess, INFINITE
- CloseHandle Process.hProcess
- End Sub
Решение задачи: «Запустить программу и ждать завершения, не вешая основной программы»
textual
Листинг программы
- '...58
- If CreateProcessA(CreateProcessA 0&, FileName, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Prog, Process) = 0 Then Unload Me: Exit Sub
- CloseHandle Process.hThread
- Do
- DoEvents
- 'Здесь можно подвигать какой нибудь прогресс бар
- Loop Until WaitForSingleObject(Process.hProcess, 20) = 0
- '59...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д