Кто вызывает метод Main () в C #?Как выйти из приложения в случае исключения в методе Main ()? - PullRequest
3 голосов
/ 20 мая 2011

Я смотрел на какой-то другой вопрос, а затем у меня был этот вопрос:

  1. Кто вызывает метод Main ()?
  2. Если я хочу выйти / выйти из приложения (когда я получаю какое-то исключение в самом методе Main ()), целесообразно ли использовать оператор return; из блока catch в Main () метод?

    • Обратите внимание, что я не запускаю какой-либо поток в методе Main () явно. Когда мы запускаем приложение, какие-либо потоки запускаются автоматически в фоновом режиме?
    • Application.Exit() не гарантирует выхода из приложения
    • ( РЕДАКТИРОВАННАЯ точка ) Environment.Exit() - это еще один вариант.

Может ли быть хорошей идеей использование оператора return; для выхода из приложения? Если нет, то что это (тонкие) вещи, из-за которых это не может быть хорошей идеей?

Для сравнения, какой подход лучше бросить?

Ответы [ 5 ]

2 голосов
/ 20 мая 2011

Если ваше приложение будет закрыто из-за непредвиденной ошибки, вы можете использовать Environment.FailFast , который "вылетит" из приложения с указанным сообщением, которое записывается в журнал событий и предлагает У пользователя появилась возможность отправить данные о сбое в Microsoft. Как разработчик, Microsoft может предоставить вам данные о сбоях.

Но если вы просто хотите вернуть условие ошибки вызывающему процессу (например, в случае консольного приложения), вы можете изменить сигнатуру метода Main так, чтобы она возвращала int, а затем возвращать ненулевое значение, которое по соглашению подразумевает условие ошибки.

1 голос
/ 20 мая 2011

Вы можете разместить гигантский блок try / catch вокруг всего Main () или настроить событие AppDomain.UnhandledException.Это не имеет непосредственного отношения, но посмотрите на Environment.Exit, вы правы насчет Application.Exit, поскольку все, что он делает, это закрывает все окна.Environment.Exit также позволяет вам указать значение, отличное от 0, в качестве состояния выхода (уровень ошибки), если вы объявили void Main() вместо int Main().

1 голос
/ 20 мая 2011

Application.Exit () для приложений на основе форм.Лучший способ обработать исключение в Main:

static void Main(string[] args) {
    try {
        // code here
    } catch {
        // do any clean up and return

        // optionally specify an exit code
        Environment.Exit(1 /* or any number other than zero since this is an error condition */);
    }
}
1 голос
/ 20 мая 2011

Кто вызывает метод Main ()?

CLR

Если я хочу выйти / выйти изapplication (когда я получаю какое-то исключение в самом методе Main ()), стоит ли использовать return;оператор из блока catch в методе Main ()?

Да, с оговоркой, что у вас нет других потоков переднего плана.

0 голосов
/ 20 мая 2011

1) ОС в основном вызывает метод Main.В нем указан начальный адрес PE заголовка .exe (если я правильно помню).

2) Да используйте оператор return из блока catch.

...