异步执行系统命令而不阻止UI并强制退出进程

时间:2012-02-18 14:39:04

标签: c# wpf

我在C#上有一个WPF应用程序,我需要执行一个从不存在的系统命令(因为它等待你按Q)。我想在第一次收到输出后强行退出它并且我也不想阻止WPF UI,所以我想异步地执行此操作(我相信线程会使事情变得更复杂)。

这就是我现在所拥有的:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C " + command;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

上面的代码有两个问题:它阻止了UI,它永远不会得到输出(进程不会退出)。

注意:我使用了WaitForExit(),因为在继续之前我需要输出。

1 个答案:

答案 0 :(得分:1)

  1. 使用BackgroundWorker Class在单独的线程上运行该进程。它可以防止阻止UI。
  2. 查看Process.OutputDataReceived Event,当应用程序写入其重定向的StandardOutput流时会发生这种情况。因此,即使过程没有停止,也可以输出。