分類:[.NET 全般]
2018/02/26(Mon) 00:05:35 編集(投稿者)
環境
VB.net WindowsFormアプリ
ボタンAからbook1.xlsを開き、
ボタンBから別のbook2.xlsを開き
それぞれの終了を検知するプログラムを作りたいと思っています。
下記のとおり実装すると、
ボタンAでbook1.xlsを開く→Excelからbook1.xlsを閉じる場合や、
ボタンBでbook2.xlsを開く→Excelからbook2.xlsを閉じる場合はそれぞれの終了を正しく検知することは出来るのですが、
ボタンAでbook1.xlsを開く→ボタンBでbook2.xlsを開くとした時に、
なぜか閉じていないのにもかかわらずBook2.xlsの終了を検知してしまいます。
それぞれのExcelの終了を正しく検知するにはどのような実装が考えられるでしょうか?
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
'Processオブジェクトを作成する
Dim p As New System.Diagnostics.Process()
'起動するファイルを指定する
p.StartInfo.FileName = "C:\Users\test\Desktop\Book1.xls"
'イベントハンドラがフォームを作成したスレッドで実行されるようにする
p.SynchronizingObject = Me
'イベントハンドラの追加
AddHandler p.Exited, New EventHandler(AddressOf p_Exited)
'プロセスが終了したときに Exited イベントを発生させる
p.EnableRaisingEvents = True
'起動する
p.Start()
Catch ex As Exception
End Try
End Sub
Private Sub p_Exited(ByVal sender As Object, ByVal e As EventArgs)
'プロセスが終了したときに実行される
MessageBox.Show("終了しました。")
End Sub
'Excelの
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
'Processオブジェクトを作成する
Dim o As New System.Diagnostics.Process()
'起動するファイルを指定する
o.StartInfo.FileName = "C:\Users\test\Desktop\Book2.xls"
'イベントハンドラがフォームを作成したスレッドで実行されるようにする
o.SynchronizingObject = Me
'イベントハンドラの追加
AddHandler o.Exited, New EventHandler(AddressOf o_Exited2)
'プロセスが終了したときに Exited イベントを発生させる
o.EnableRaisingEvents = True
'起動する
o.Start()
Catch ex As Exception
End Try
End Sub
Private Sub o_Exited2(ByVal sender As Object, ByVal e As EventArgs)
'プロセスが終了したときに実行される
MessageBox.Show("終了しました。")
End Sub
End Class