我正在研究的是一个在命令提示符下运行命令并将结果输出到表单中的程序。但无论何时启动命令,它都会锁定窗体,然后您就不能再单击窗体上的任何内容。这是一个问题,因为我想添加一个停止按钮,请参阅下面的相应代码。
private void Start_Click(object sender, EventArgs e)
{
var proc = new Process();
proc.StartInfo.Arguments = "/C robocopy " + "\"" + source.Text + "\" \"" + Destination.Text + "\" /E /ZB /W:1 /R:3 /MT /A-:SH";
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.EnableRaisingEvents = true;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.UseShellExecute = false;
// see below for output handler
proc.ErrorDataReceived += proc_DataReceived;
proc.OutputDataReceived += proc_DataReceived;
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit();
}
答案 0 :(得分:1)
删除对proc.WaitForExit();
的调用,因为这会阻止执行。请参阅[文档](https://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit(v=vs.110).aspx)了解WaitForExit
:
设置等待关联进程退出的时间段,并阻止当前执行的线程,直到时间结束或进程已退出。要避免阻止当前线程,请使用已退出事件。
如上所述,如果要在流程退出后运行代码,请使用Exited
事件。由于您的代码不这样做,您可能只是跳过此步骤。