' pipeasync.vb Imports System Imports System.Text Imports System.IO Imports System.Diagnostics Class PipeAsync Shared output As New StringBuilder Shared Sub main() ' 子プロセスで処理したいテキスト Dim text As String = File.ReadAllText("sample.txt", _ Encoding.GetEncoding("Shift_JIS")) Dim p As New Process p.StartInfo.FileName = "cat.exe" ' 子プロセスの実行ファイル名 p.StartInfo.Arguments = "-n" ' 子プロセスのオプション(もしあれば) p.StartInfo.CreateNoWindow = True ' コンソール・ウィンドウを開かない p.StartInfo.UseShellExecute = False ' シェル機能を使用しない p.StartInfo.RedirectStandardOutput = True ' 標準出力をリダイレクト p.StartInfo.RedirectStandardInput = True ' 標準入力をリダイレクト ' イベント・ハンドラ設定 AddHandler p.OutputDataReceived, AddressOf OutputHandler p.Start() ' 子プロセスの実行開始 p.BeginOutputReadLine() ' 子プロセスの出力読み込み開始 Using sw As StreamWriter = p.StandardInput sw.Write(text) ' 子プロセスへの書き込み End Using p.WaitForExit() ' 子プロセスが終了するのを待つ p.Dispose() ' 子プロセスの破棄 Console.WriteLine(output.ToString()) ' 子プロセスの出力を表示 End Sub ' 子プロセスが標準出力に出力したときに呼び出されるメソッド Shared Sub OutputHandler(ByVal o As Object, ByVal args As DataReceivedEventArgs) output.AppendLine(args.Data) ' 出力されたデータを保存 End Sub End Class ' コンパイル方法:vbc pipeasync.vb