- 締切済み
[VB2008]WaitForExitでメインフォームに再描画処理をさせながら待機する
WaitForExitの実行中は、その処理が終わるまでコントロールを返しませんが WaitForExitの実行中でも、再描画処理やウィンドウの移動などの処理をさせるにはどうすればいいでしょうか。 ご回答、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
待ち時間付きの呼び出しを行って 返り値を判定しながら Application.DoEventsを実行すればいいのでは Do Application.DoEvents() Loop Until objProc.WaitForExit( 500 )
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
ぱっと思いつくのはマルチスレッド化ですね。外部Exeの実行を別スレッドで行えば、メインスレッドで動いているフォームの再描画等はブロックされません。 Private thrdExecute As System.Threading.Thread ' Exeを実行するスレッド Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim info As New System.Diagnostics.ProcessStartInfo("C:\Windows\explorer.exe") info.Arguments = "/e,/root,C:\Program Files\" info.WindowStyle = Diagnostics.ProcessWindowStyle.Normal ' スレッドを作成して実行 thrdExecute = New System.Threading.Thread(AddressOf ExecuteThread) thrdExecute.Start(info) End Sub ' このメソッドは別スレッドで動かす Private Sub ExecuteThread(ByVal arg As Object) Dim procNew As New System.Diagnostics.Process() procNew.StartInfo = TryCast(arg, System.Diagnostics.ProcessStartInfo) If procNew.StartInfo Is Nothing Then Return ' 指定されたExeを実行し、終了まで待機 If procNew.Start() Then procNew.WaitForExit() Console.WriteLine("Exe終了") End Sub 別スレッドにProcessStartInfoを渡す仕組みにしていますが、このあたりは調整してください。 過去にマルチスレッドを使った経験がなければ、参考URLあたりで仕組みや注意点を抑えておくと良いと思います。