В нашем приложении мы будем постоянно вызывать функцию ExecuteAppAsync(), чтобы программа работала постоянно. В этом тесте мы пытаемся запустить Notepad.exe. Тест завершится запуском одного Notepad.exe в Windows.
Ожидаемым результатом теста является первый запуск Notepad.exe, и p.WaitForExit() будет ждать завершения первого notepad.exe, а затем продолжит вызывать ExecuteAppAsync().
Фактический результат теста: p.WaitForExit() не будет ждать завершения работы первых двух Notepad.exe, а будет ждать для завершения третьего Notepad.exe. Тест завершился запуском двух файлов Notepad.exe в Windows (на некоторых тестовых модулях было запущено три файла Notepad.exe).
Почему вызов WaitForExit() не работает для первых двух вызовов функций?
public async void LaunchAppAsync(App app)
{
var result = await LaunchApp(app);
if (!result.Success)
await _dialogService.ErrorDialogAsync(result.Message);
else
{ //if no error, go ahead and try launch the app persistently if it is enabled.
if (app.Persistent)
{
await Task.Delay(1000);
LaunchAppAsync(app);
}
}
}
public async Task LaunchApp(App app)
{
var result = new TaskResult { Success = true };
if (app == null)
{
result.Success = false;
return result;
}
result = await ExecuteAppAsync(app);
return result;
}
public async Task ExecuteAppAsync(App app)
{
var result = new TaskResult { Success = false };
var windowSize = ProcessWindowStyle.Normal;
var startInfo = new ProcessStartInfo(app.Path) //C:\Windows\System32\notepad.exe
{
WindowStyle = windowSize,
UseShellExecute = true
};
try
{
await Task.Run(() =>
{
var p = Process.Start(startInfo);
p.WaitForExit();
});
}
catch (Exception ex)
{
result.Success = false;
return result;
}
result.Success = true;
return result;
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... lways-work