ango
ango

Reputation: 859

Print standard output of Process in event handler

I have a console application which I am running as a process from my C# program.
I have made an event handler to be called when this process terminates.
How do I print the Standard output of this process inside the event handler. Basically, how do I access the properties of a process inside the event handler ?
My code looks like below.

public void myFunc()
{
.
.
Process p = new Process();
p.StartInfo.FileName = "myProgram.exe";
p.StartInfo.RedirectStandardOutput = true;
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(myProcess_Exited);
p.Start();
.
.
}

private void myProcess_Exited(object sender, System.EventArgs e)
{

    Console.WriteLine("log: {0}", <what should be here?>);
}

I do not want to make the process object p as a field of the class.

Also, what is the use of System.EventArgs e field ? How can this be used ?

Upvotes: 0

Views: 1546

Answers (3)

Servy
Servy

Reputation: 203817

One option would be to capture it in a closure:

public void myFunc()
{
    Process p = new Process();
    p.StartInfo.FileName = "myProgram.exe";
    p.StartInfo.RedirectStandardOutput = true;
    p.EnableRaisingEvents = true;
    p.Exited += new EventHandler((sender, args) => processExited(p));
    p.Start();
}

private void processExited(Process p)
{
    Console.WriteLine(p.ExitTime);
}

Upvotes: 1

Eric J.
Eric J.

Reputation: 150108

In your event handler

object sender

is the Process object (that is a pretty common pattern by the way throughout the .NET Framework)

Process originalProcess = sender as Process;
Console.WriteLine("log: {0}", originalProcess.StandardOutput.ReadToEnd());

Note also that you have to set:

p.StartInfo.UseShellExecute = false;

to use IO redirection in your Process.

Upvotes: 2

Tigran
Tigran

Reputation: 62246

Use like this:

private void myProcess_Exited(object sender, System.EventArgs e)
{
    Process pro = sender as Process; 
    string output = pro.StandardOutput.ReadToEnd()
    Console.WriteLine("log: {0}", output);
}

Standart output is nothing else then StreamReader.

Upvotes: 1

Related Questions