Процесс.WaitForExit() не всегда работаетC#

Место общения программистов C#
Ответить
Anonymous
 Процесс.WaitForExit() не всегда работает

Сообщение Anonymous »

В нашем приложении мы будем постоянно вызывать функцию 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»