VB.NETで外部アプリケーションを呼び出し、終了するまで再描画を停止せずに待機する方法
通常、VB.NETで外部アプリケーションを呼び出し、終了するまで待機させようとすると、呼び出し元プロセスが完全に待機状態となって
再描画すら抑制されてしまいます。
これを簡単に解決するためには、BackgroundWorker、ShowDialogを利用します。
以下のようなクラスを作成して、Runメソッドに実行ファイルパスを渡してやります。
Public Class ShellUtil Public Shared Sub Run(ByVal pName As String)
Dim a As New DummyForm
a.pName = pName
a.ShowInTaskbar = False
a.StartPosition = FormStartPosition.Manual
a.Top = -1000
a.Width = 0
a.Height = 0
a.ShowDialog()
End Sub
Private Class DummyForm
Inherits System.Windows.Forms.Form
Public pName As String = ""
Private EndFlg As Boolean = False
Private Sub DummyForm_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Dim b As New System.ComponentModel.BackgroundWorker
AddHandler b.DoWork, AddressOf DoWork
b.RunWorkerAsync()
Dim Timer1 As New Timer
AddHandler Timer1.Tick, AddressOf Timer1_Tick
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Shell(pName, AppWinStyle.NormalFocus, True)
Me.EndFlg = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
If Me.EndFlg = True Then
Me.Close()
End If
End Sub
End Class
End Class
【呼び出し側】
ShellUtil.Run("C:\Program Files\Microsoft Office\Office\EXCEL.exe")