Как ловить исключения из процессов в C # - PullRequest
4 голосов
/ 26 ноября 2008

У меня здесь есть программа приема заявок, которая выглядит примерно так:

public Result Run(CommandParser parser)
{
    var result = new Result();
    var watch = new Stopwatch();

    watch.Start();

    try
    {
        _testConsole.Start();

        parser.ForEachInput(input =>
        {
            _testConsole.StandardInput.WriteLine(input);
            return _testConsole.TotalProcessorTime.TotalSeconds < parser.TimeLimit;
        });

        if (TimeLimitExceeded(parser.TimeLimit))
        {
            watch.Stop();
            _testConsole.Kill();
            ReportThatTestTimedOut(result);
        }
        else
        {
            result.Status = GetProgramOutput() == parser.Expected ? ResultStatus.Passed : ResultStatus.Failed;
            watch.Stop();
        }
    }
    catch (Exception)
    {
        result.Status = ResultStatus.Exception;
    }

    result.Elapsed = watch.Elapsed;
    return result;
}

_testConsole - это адаптер процесса, который превращает обычный процесс .net в нечто более работоспособное. Однако мне трудно поймать какие-либо исключения из запущенного процесса (то есть оператор catch здесь не имеет смысла) Я использую что-то вроде:

_process = new Process
                           {
                               StartInfo =
                                   {
                                       FileName = pathToProcess,
                                       UseShellExecute = false,
                                       CreateNoWindow = true,
                                       RedirectStandardInput = true,
                                       RedirectStandardOutput = true,
                                       RedirectStandardError = true,
                                       Arguments = arguments
                                   }
                           };

для настройки процесса. Есть идеи?

1 Ответ

14 голосов
/ 26 ноября 2008

Исключения не передаются от одного процесса к другому. Лучшее, что вы могли бы сделать, - это контролировать код выхода процесса - обычно, код выхода 0 представляет успех, а любой другой код выхода представляет ошибку.

Разве это не так для запускаемых вами процессов, конечно, другое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...