«前の日記(2011年02月03日) 最新 次の日記(2011年02月07日)» 編集

日々をアレコレ


2011年02月06日

.NETで別プロセスを起動して非同期でリダイレクトを取る

次の案件でコマンドラインアプリのGUIラッパーを作る。呼び出したコマンドラインアプリのリダイレクトを表示する機能が必要なんだけど、コマンドラインアプリのプロセスの終了を待ってリダイレクトを取得する方法はすぐに見つかるけど、非同期で更新していく方法がなかなか見つからなかったので、メモしておく。

void StartProcess()
{
    Process p = new Process();

    // プロセス開始のための情報
    p.StartInfo.FIleName = "hogehoge.exe";         // 実行ファイル
    p.StartInfo.UseShellExecute = false;           // シェルは利用しない
    p.StartInfo.RedirectStandardOutput = ture;     // 出力リダイレクトを有効にする

    // 出力リダイレクト読み込みイベントハンドラ登録
    p.OutputDataReceived += new DataReceivedEventHandler(procOutputReceived);

    // プロセス終了イベントハンドラ登録
    p.Exited += new EventHandler(procExited);

    // プロセス開始
    p.Start();
}

static void procOutputReceived(object sender, DataReceivedEventArgs arg)
{
    if(!String.IsNullOrEmpty(arg.Data))
    {
        Console.WriteLine(arg.Data);
    }
}

static void procExited(object sender, EventArgs arg)
{
    Console.WiteLine("Process:hogehoge done!");
}

«前の日記(2011年02月03日) 最新 次の日記(2011年02月07日)» 編集