Использовать понимание списка:
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])]
Хорошо, если у Вас есть доступ к приложению, можно обработать событие SessionEnded.
...
Microsoft.Win32.SystemEvents.SessionEnded +=new
Microsoft.Win32.SessionEndedEventHandler(shutdownHandler);
...
private void shutdownHandler(object sender, Microsoft.Win32.SessionEndedEventArgs e) {
// Do stuff
}
Это должен быть поток, который продолжает выполнять предотвращение Вашего приложения для закрытия. Если бы Вы используете поточную обработку легкой фиксации, должен был бы установить его на фон.
Поток является или фоновым потоком или приоритетным потоком. Фоновые потоки идентичны приоритетным потокам, за исключением того, что фоновые потоки не препятствуют тому, чтобы процесс завершился. После того как все приоритетные потоки, принадлежащие процессу, завершились, общеязыковая среда выполнения заканчивает процесс. Любые остающиеся фоновые потоки останавливаются и не завершаются.
http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx
Когда пользователь выходит из системы, или Windows закрывается, WM_QUERYENDSESSION
сообщение отправляется во все окна верхнего уровня. См. документацию MSDN здесь.
Поведение по умолчанию приложения WinForm в ответ на это сообщение состоит в том, чтобы инициировать FormClosing
событие с CloseReason == WindowsShutDown
или другие. Обработчик событий, хотя может принять решение быть упрямым и отказаться завершать работу приложения, таким образом поддерживая систему в рабочем состоянии.
Проверить FormClosing
обработчики Ваших приложений. Возможно, там существует что-то. Я видел этот вид материала пару раз.
Или возможно приложение .NET игнорирует близко или сообщения выхода нарочно?
Фоновые потоки были быстрым и грязным решением, лучшее решение состоит в том, чтобы использовать объекты синхронизации (ManualResetEvent
, Mutex
или что-то еще) для остановки других потоков;
Или иначе отслеживайте все свои открытые окна и отправленный WM_CLOSE
обменивайтесь сообщениями, когда главное приложение закроется.
Необходимо ли дать больше информации о том, как Вы запускаете те приложения GUI. возможно, Вы запускаете один поток для каждого приложения и вызова Application.Run(new Form1());
?
Можно также изучить создание a AppDomain
для каждого Приложения GUI
Обычно приложение .NET ответило бы правильно - по крайней мере, это 'из поля' поведение. Если это не, могло бы быть много вещей, продолжающихся. Мое лучшее предположение, не зная ничего больше о Вашей программе - то, что у Вас есть продолжительный процесс, входящий в основной поток UI, это препятствует тому, чтобы приложение ответило на сообщения окна.