Вы, безусловно, можете использовать объект Process, чтобы «запустить» исполняемый файл асинхронно, а с помощью возвращаемого объекта процесса вы можете проверить, выполнен ли EXE, или уничтожить процесс.Хитрость заключается в том, чтобы получить информацию о выходе и потоке ошибок обратно, не мешая работе консоли, пока программа работает, так что вы можете делать другие вещи.Из документов MSDN похоже, что использование BeginOutputReadLine
может помочь:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Хотя, если вы хотите использовать фоновое поведение, вам нужно выполнить StandardOutput.ReadToEnd () в фоновом потоке изатем создайте механизм для извлечения этого вывода из основного потока консоли, что кажется большой работой, и в настоящее время я могу думать о любых преимуществах по сравнению с фоновыми заданиями PowerShell.
Другой подход заключается в создании пространства выполнения для выполненияработа bg, как указывает это сообщение в блоге Джима Трухера .