トップ回答者
softの処理終了後に次をスタートさせたい

質問
-
宜しくお願いします
studio professinal 2013 vb 使用
botton click で下記を動作させる(excel file を open)
Process.Start("excel.exe", TextBox1.Text + "\" + TextBox2.Text + ".xlsx")
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
Application.Restart()excel file は open するが、再スタートが excel open と同時に起動してしまいます。
excel終了後に、再スタートをさせたいのですが どうすべきでしょうか?
t.suzu
回答
-
こんにちは。
単純な方法であれば、プロセス終了まで待機することでしょうか。
Dim hoge = Process.Start("excel.exe", "hoge.xlsx") hoge.WaitForExit() Application.Restart()
WaitForExitで呼び出し元が停止するのが望ましくないのであれば、Exitedイベントをハンドルする方法もあります。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim hoge = Process.Start("notepad") hoge.EnableRaisingEvents = True AddHandler hoge.Exited, AddressOf hoge_Exited End Sub Private Sub hoge_Exited(sender As Object, e As EventArgs) Application.Restart() End Sub
- 編集済み いわさ Tak1waMVP, Moderator 2016年2月3日 1:29
- 回答の候補に設定 星 睦美 2016年2月3日 4:46
- 回答としてマーク 星 睦美 2016年4月13日 5:42
-
以下のスレッドに同様の内容が記載されています
以下、抜粋です。
------------------------------------------------------------------------------------------------------------------------------
Process.Start静的メソッドはProcessオブジェクトを返しますが、この返されたProcessオブジェクトに、実行中のプロセスが終了したときに呼び出されるExitedイベントが存在しています。
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.exited.aspx
また、プロセスが終了するまで待機するには、 Process.WaitForExit メソッドを使えばいいと思います。
以下、どぼんさんの記事も参考になりそうなので提示しときます。
すべての返信
-
こんにちは。
単純な方法であれば、プロセス終了まで待機することでしょうか。
Dim hoge = Process.Start("excel.exe", "hoge.xlsx") hoge.WaitForExit() Application.Restart()
WaitForExitで呼び出し元が停止するのが望ましくないのであれば、Exitedイベントをハンドルする方法もあります。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim hoge = Process.Start("notepad") hoge.EnableRaisingEvents = True AddHandler hoge.Exited, AddressOf hoge_Exited End Sub Private Sub hoge_Exited(sender As Object, e As EventArgs) Application.Restart() End Sub
- 編集済み いわさ Tak1waMVP, Moderator 2016年2月3日 1:29
- 回答の候補に設定 星 睦美 2016年2月3日 4:46
- 回答としてマーク 星 睦美 2016年4月13日 5:42
-
以下のスレッドに同様の内容が記載されています
以下、抜粋です。
------------------------------------------------------------------------------------------------------------------------------
Process.Start静的メソッドはProcessオブジェクトを返しますが、この返されたProcessオブジェクトに、実行中のプロセスが終了したときに呼び出されるExitedイベントが存在しています。
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.exited.aspx
また、プロセスが終了するまで待機するには、 Process.WaitForExit メソッドを使えばいいと思います。
以下、どぼんさんの記事も参考になりそうなので提示しときます。 -
念のため。
Excel がすでに起動している状態で Process.Start で関連付け起動すると、null が帰ってくるとこがあります。
要件や環境次第では問題になるかもしれませんので、ご注意を。Excel を明示的に起動する、今の形なら大丈夫かもしれませんが。
- 編集済み AzuleanMVP, Moderator 2016年2月4日 3:27