.NET C# exe не закрывается, когда ПК перезапущен, мешая машине перезапустить

Использовать понимание списка:

a = ((5,), (2,0), (1,1))

b = [(a[1][0] + i*a[2][0], a[1][1] + i*a[2][1]) for i in range(a[0][0])]
5
задан ScottCher 27 October 2008 в 20:53
поделиться

6 ответов

Хорошо, если у Вас есть доступ к приложению, можно обработать событие SessionEnded.

...
Microsoft.Win32.SystemEvents.SessionEnded +=new
  Microsoft.Win32.SessionEndedEventHandler(shutdownHandler);

...

private void shutdownHandler(object sender, Microsoft.Win32.SessionEndedEventArgs e) {
  // Do stuff
}
5
ответ дан 18 December 2019 в 09:55
поделиться

Это должен быть поток, который продолжает выполнять предотвращение Вашего приложения для закрытия. Если бы Вы используете поточную обработку легкой фиксации, должен был бы установить его на фон.

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

http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx

5
ответ дан 18 December 2019 в 09:55
поделиться

Когда пользователь выходит из системы, или Windows закрывается, WM_QUERYENDSESSION сообщение отправляется во все окна верхнего уровня. См. документацию MSDN здесь.

Поведение по умолчанию приложения WinForm в ответ на это сообщение состоит в том, чтобы инициировать FormClosing событие с CloseReason == WindowsShutDown или другие. Обработчик событий, хотя может принять решение быть упрямым и отказаться завершать работу приложения, таким образом поддерживая систему в рабочем состоянии.

Проверить FormClosing обработчики Ваших приложений. Возможно, там существует что-то. Я видел этот вид материала пару раз.

5
ответ дан 18 December 2019 в 09:55
поделиться

Или возможно приложение .NET игнорирует близко или сообщения выхода нарочно?

1
ответ дан 18 December 2019 в 09:55
поделиться

Фоновые потоки были быстрым и грязным решением, лучшее решение состоит в том, чтобы использовать объекты синхронизации (ManualResetEvent, Mutex или что-то еще) для остановки других потоков;

Или иначе отслеживайте все свои открытые окна и отправленный WM_CLOSE обменивайтесь сообщениями, когда главное приложение закроется.

Необходимо ли дать больше информации о том, как Вы запускаете те приложения GUI. возможно, Вы запускаете один поток для каждого приложения и вызова Application.Run(new Form1()); ?

Можно также изучить создание a AppDomain для каждого Приложения GUI

1
ответ дан 18 December 2019 в 09:55
поделиться

Обычно приложение .NET ответило бы правильно - по крайней мере, это 'из поля' поведение. Если это не, могло бы быть много вещей, продолжающихся. Мое лучшее предположение, не зная ничего больше о Вашей программе - то, что у Вас есть продолжительный процесс, входящий в основной поток UI, это препятствует тому, чтобы приложение ответило на сообщения окна.

0
ответ дан 18 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: