【发布时间】:2017-08-18 05:29:55
【问题描述】:
我创建了一个带有 2 个按钮的 WPF 应用程序。单击第一个按钮执行 cmd 并等待命令完成,因为我需要在执行完成后读取结果文件。在第二个按钮上单击我正在通过进程终止停止执行 cmd。
但是在开始命令执行后,我无法在完成 cmd 执行之前停止执行。
有没有并行执行的方法?
开始按钮代码
string filename = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "nunit-console.exe");
Process proc = Process.Start(filename, "/result:" + resultFile + ".xml " + fileName);
proc.WaitForExit();
【问题讨论】:
-
使用Multithreading,因为你的主线程在等待
proc.WaitForExit();时被冻结 -
@Nobody 是正确的。稍微说明一下,您的 UI 有自己的线程,并且需要遵循一些规则才能让您的 UI 更新或更改其他线程。查看异步/等待和更新到/从 UI 线程。大量示例和教程。
-
请注意,您可能需要也可能不需要使用
WaitForExit()。这取决于您没有费心展示的其余代码。Process类提供异步处理 I/O 和状态处理。参见例如stackoverflow.com/questions/2085778/…。在后台任务或线程中运行上述代码是从字面上阅读问题的最明显方法,但还有其他方法可以解决它。