处理WaitForExit并获取返回值async

时间:2014-04-17 13:24:06

标签: c# process return-value exit-code

我有一个启动进程的函数,等待退出并返回exitcode:

function int login(string pathtofile)
{
    //...
    Process process = new Process();
    process.StartInfo.FileName = pathtofile;
    process.Start();
    process.WaitForExit();
    return process.ExitCode;
}

这很好用。但是因为它等待退出,它会阻止窗口形式(我有一个Marquee Progress Bar,它会继续移动,现在已经停止了)。 我不知道如何返回退出代码异步,我无法找到任何我理解的解决方案。

2 个答案:

答案 0 :(得分:4)

您可以使用此代码:

void Login(string pathtofile)
{
    Process process = new Process();
    process.StartInfo.FileName = pathtofile;
    process.EnableRaisingEvents = true;
    process.Exited += new EventHandler(process_Exited);
    process.Start(); 
}

void process_Exited(object sender, EventArgs e)
{
    Process p = (Process)sender;
    int exitCode = p.ExitCode;
}

但请注意,Login函数将在启动进程后直接退出,因此您无法返回整数值。您可以在函数process_exited

中获得退出代码

答案 1 :(得分:0)

您可以注册Process.Exit事件并处理那里的退出代码。

myProcess.EnableRaisingEvents = true;
myProcess.Exited += OnMyProcessExited;

然后从OnMyProcessExited方法返回退出状态