Извините, если заголовок не соответствует точному описанию проблемы, с которой я сталкиваюсь, я принимаю предложения по редактированию.
Я разрабатываю компонент, который при вызове должен запуститьОбработайте и дождитесь его завершения.Процесс может захотеть перенаправить вывод std в пользовательскую winform-форму (всплывающее окно), чтобы пользователь мог получить отзыв о состоянии процесса.
Чтобы протестировать компонент перед его реализацией в официальном приложении, я 'мы разработали консольное приложение, которое вызывает модуль, точно так же, как официальное приложение будет принимать входные данные пользователя из GUI -> не всплывающее окно, главное окно приложения.
При тестировании в консольном приложении,все работает как я ожидаю.При тестировании в официальном приложении с графическим интерфейсом процесс завершается преждевременно с кодом выхода 0 (все в порядке).Я имею в виду, что он печатает что-то в пользовательской форме win, до определенной точки, всегда в одной и той же точке, а затем завершается.
Я не могу понять, почему или как определить первопричины, и, возможно, что-то с этим сделать.Я ищу помощь, здесь и далее исходный код модуля для выполнения процесса:
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.FileName = myExePath;
processStartInfo.Arguments = myExeArguments;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = false;
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
using (Process process = Process.Start(processStartInfo))
{
process.EnableRaisingEvents = true;
// accessory code. Issue is reproduced even without this section ---- //
Thread t = new Thread(() =>
{
// show a custom winform for the user to read
});
t.Start();
// ------------------------------------------ //
process.OutputDataReceived += (s, a) => {
// Do something with a.Data
};
process.BeginOutputReadLine();
process.WaitForExit();
}
РЕДАКТИРОВАТЬ:
скажем, что процесс myExe должен распечатать что-то в стандартный вывод.Я прочитал это кое-что, и оно идет по следующему принципу:
line 1
line 2
I'm doing something
line 3
start doing something else <-- when component is integrated in official application, here Process Exits without exceptions
line 4
line 5 <-- When component is tested in Console app, here is where Process Exits without exceptions.
Я должен прочитать до строки 5 как в сценарии тестирования, так и в официальном сценарии.