Может ли консольное приложение остаться в живых, пока оно не завершит свою работу? - PullRequest
2 голосов
/ 20 сентября 2008

Я только что прочитал Thread.IsBackground, и если я правильно понимаю, когда он установлен на false, поток является основным потоком, что означает, что он должен оставаться в живых до тех пор, пока он не завершит работу, даже если приложение было выход из Теперь я протестировал это с приложением winform, и оно работает как положено, но при использовании с консольным приложением процесс не остается в живых, а сразу завершается. Thread.IsBackground ведет себя иначе, чем консольное приложение, чем приложение winform?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2008

Свойство Thread.IsBackground помечается только в том случае, если поток должен блокировать выход из процесса. Он не выполняет никакой магии, чтобы поддерживать поток до какого-то явного выхода.

Процитируем Свойство Thread.IsBackground MSDN (выделено):

Поток - это фоновый поток или поток переднего плана. Фоновые потоки идентичны приоритетным, за исключением того, что фоновые потоки не препятствуют завершению процесса. Как только все потоки переднего плана, принадлежащие процессу, завершаются, общеязыковая среда выполнения завершает процесс. Все оставшиеся фоновые потоки останавливаются и не завершаются.

Чтобы поддерживать консольное приложение в активном состоянии, вам понадобится какой-то цикл, который будет вращаться, пока вы не попросите его остановить с помощью флага или подобного. В приложения Windows Forms это встроено благодаря накачке сообщений (я полагаю).

1 голос
/ 20 сентября 2008

Я полагаю, что с приложением на основе winforms у вас есть отдельный поток для обработки сообщений, поэтому, если «основной» поток завершает работу, у вас все еще есть поток, который будет поддерживать процесс. В консольном приложении после выхода из основного режима, если вы не запустили поток переднего плана, процесс также завершается.

0 голосов
/ 20 сентября 2008

ИМХО, действительно, вы должны быть намного более откровенны в отношении ожидаемой семантики вашего приложения и намеренно .Join.

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