Можно ли убить WaitForSingleObject (handle, INFINITE)?

У меня проблемы с закрытием приложения, использующего 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, чтобы заставить его вернуться?

Большое спасибо.

7
задан Chris Wallis 17 May 2011 в 15:17
поделиться