ConsoleAppLauncher - библиотека с открытым исходным кодом, созданная специально для ответа на этот вопрос. Он захватывает все выходные данные, генерируемые в консоли, и предоставляет простой интерфейс для запуска и закрытия консольного приложения.
Событие ConsoleOutput вызывается каждый раз, когда консоль записывает новую строку в стандартный вывод / вывод ошибок. Линии поставлены в очередь и гарантированно следуют порядку вывода.
Также доступно как пакет NuGet .
Пример вызова для получения полного вывода на консоль:
// Run simplest shell command and return its output.
public static string GetWindowsVersion()
{
return ConsoleApp.Run("cmd", "/c ver").Output.Trim();
}
Пример с обратной связью в реальном времени:
// Run ping.exe asynchronously and return roundtrip times back to the caller in a callback
public static void PingUrl(string url, Action<string> replyHandler)
{
var regex = new Regex("(time=|Average = )(?<time>.*?ms)", RegexOptions.Compiled);
var app = new ConsoleApp("ping", url);
app.ConsoleOutput += (o, args) =>
{
var match = regex.Match(args.Line);
if (match.Success)
{
var roundtripTime = match.Groups["time"].Value;
replyHandler(roundtripTime);
}
};
app.Run();
}