- - PR -
VB.NET ProcessクラスのHasExited()を使用するとエラーになる
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-01-23 11:56
いつも、参考にさせてもらっています。
プロセスが終了しているかを取得するために PorcessクラスのHasExited()を使用していまが、 そこで以下のエラーが発生してしまいます。 (エラーメッセージ) このオブジェクトに関連付けられているプロセスはありません。 ソースは以下のようにしています。 ProcessStartInfoのメンバーの値をいろいろ変えたのですが だめでした。 どうすれば、HasExited()をエラーなく利用できるのでしょうか? どなたか知っている方がいらっしゃれば、ご教授お願いいたします。 (ソース) Try Dim startInfo As New ProcessStartInfo Dim path As String = "○○.exe" Dim prcss As Process = New Process With startInfo .FileName = path .Verb = "" .UseShellExecute = False .WorkingDirectory = 実行するディレクトリを指定 .RedirectStandardError = True .RedirectStandardInput = True .RedirectStandardOutput = True .Arguments = "param1" .CreateNoWindow = True End With prcss.Start(startInfo) ’終了確認ループ Do エラー箇所→ If (prcss.HasExited() = True) Then Exit Do Loop Catch ex As Exception エラー処理 End Try | ||||||||||||||||
|
投稿日時: 2004-01-23 13:13
Process#Start(ProcessStartInfo) メソッドはクラスメンバなので、
そのメソッドの戻り値(Process オブジェクト)を受ければ、 そのオブジェクトの HasExited プロパティで値を取得することができます。 また、Process オブジェクトの StartInfo プロパティに ProcessStartInfo オブジェクトを セットして Process#Start() メソッド(インスタンスメンバ)を実行してもできます。 [ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 13:29 ] | ||||||||||||||||
|
投稿日時: 2004-01-23 13:24
架空兎さま、ご返答ありがとうございます。
問題は解消されました。 本当に助かりました、今後ともよろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2004-01-23 13:40
ふと気になったのですが、Process#WaitForExit メソッドを使った方が良いのでは? ↓補足ありがとうございます。 [ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 13:40 ] [ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 17:08 ] | ||||||||||||||||
|
投稿日時: 2004-01-23 14:34
補足:
Do〜Loopの中で、「prcc.HasExited() = True」の判定が休みなく行われる、つまり、CPU使用率が100%に近くなるからです。Process#WaitForExitを使うことで、プロセスを休止状態にし、CPU使用率を0%に近くすることができます。 | ||||||||||||||||
|
投稿日時: 2004-01-23 16:26
架空兎さん、、Jittaさん、ご指摘ありがとうございました。 ご指摘の通りProcess#WaitForExitを使わせていただきました。 |
1