У меня проблемы с закрытием приложения, использующего WaitForSingleObject () с таймаутом INFINITE.
Полная картина такова. Я делаю следующее, чтобы мое приложение могло обрабатывать событие пробуждения устройства:
Зарегистрируйте событие с помощью:
CeRunAppAtEvent("\\\\.\\Notifications\\NamedEvents\\WakeupEvent",
NOTIFICATION_EVENT_WAKEUP);
Запустите новый поток для ожидания:
Thread waitForWakeThread = new Thread(new ThreadStart(WaitForWakeup));
waitForWakeThread.Start();
Затем выполните следующее в целевом методе:
private void WaitForWakeup()
{
IntPtr handle = CreateEvent(IntPtr.Zero, 0, 0, "WakeupEvent");
while (true)
{
WaitForSingleObject(handle, INFINITE);
MessageBox.Show("Wakey wakey");
}
}
Все это работает нормально, пока я не попытаюсь закрыть приложение, когда, как и ожидалось, WaitForSingleObject продолжает ждать и не позволяет приложению закрыться должным образом. Мы разрешаем запускать только один экземпляр нашего приложения за раз, и мы проверяем это при запуске. Кажется, он продолжает работать, пока устройство не будет мягко перезагружено.
Есть ли способ убить дескриптор, которого ждет WaitForSingleObject, чтобы заставить его вернуться?
Большое спасибо.