掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Invokeで停止しないようにするには? (ID:146042)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境:VB.NET2005, VISTA (処理が長めの)バッチファイルを実行し、出力結果を取得したいのですが、 Me.Invokeの箇所で処理が停止してしまいます。 Invokeの使い方が間違っているのでしょうか? ※テスト用としてouttree.batは「tree /f>tree.txt」が複数行書いてあります Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click subExecute("C:\temp\outtree.bat", "", "C:\temp\") End Sub Private Sub subWriteLog(ByVal strMsg As String) Debug.Print(strMsg) '実際にはファイルに出力する処理 End Sub Private Sub subExecute(ByVal strCmd As String, ByVal strArg As String, ByVal strWorkPath As String) Dim hProcess As New System.Diagnostics.Process hProcess.StartInfo.Arguments = strArg hProcess.StartInfo.UseShellExecute = False hProcess.StartInfo.FileName = strCmd hProcess.StartInfo.WorkingDirectory = strWorkPath hProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden '非表示 hProcess.StartInfo.CreateNoWindow = True hProcess.StartInfo.RedirectStandardOutput = True '標準出力をリダイレクト hProcess.StartInfo.RedirectStandardError = True AddHandler hProcess.OutputDataReceived, New DataReceivedEventHandler(AddressOf processOutDataReceived) AddHandler hProcess.ErrorDataReceived, New DataReceivedEventHandler(AddressOf processErrDataReceived) Try hProcess.Start() hProcess.BeginOutputReadLine() hProcess.BeginErrorReadLine() hProcess.WaitForExit() Catch ex As Exception MessageBox.Show(ex.Message) Finally '解放 hProcess.Close() hProcess.Dispose() End Try End Sub 'スレッドから関数を呼び出すための宣言 Private Delegate Sub subWriteLogDelegate(ByVal strMsg As String) '標準出力取得(スレッド) Private Sub processOutDataReceived(ByVal sender As System.Object, ByVal e As DataReceivedEventArgs) If String.IsNullOrEmpty(e.Data) = False Then Dim Proc As New subWriteLogDelegate(AddressOf subWriteLog) Me.Invoke(Proc, e.Data) End If End Sub 'エラー出力取得(スレッド) Private Sub processErrDataReceived(ByVal sender As System.Object, ByVal e As DataReceivedEventArgs) If String.IsNullOrEmpty(e.Data) = False Then Dim Proc As New subWriteLogDelegate(AddressOf subWriteLog) Me.Invoke(Proc, e.Data) End If End Sub
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.