Асинхронное использование RegNotifyChangeKeyValue
достаточно просто: передайте ему объект события и подождите, пока событие не будет сообщено.
Однако не совсем ясно, как правильно отменить запрос уведомления.,Например, если тайм-аут был установлен на ожидание следующим образом:
RegNotifyChangeKeyValue(hKey, false, REG_NOTIFY_CHANGE_LAST_SET, regEvent.SafeWaitHandle, true);
regEvent.WaitOne(TimeSpan.FromMinutes(30))
Если тайм-аут происходит без срабатывания уведомлений, это уведомление остается предположительно ожидающим и ожидающим срабатывания.Это хуже, если уведомление и ожидание находятся в цикле, потенциально регистрируя много уведомлений (по одному на каждый истекший тайм-аут).
Должен ли я просто закрыть как дескриптор события (regEvent
), так и дескриптор ключа реестра (hKey
)?Есть ли что-то еще, что мне нужно позвонить, например, уведомления об изменении каталога имеют FindCloseChangeNotification
, есть ли здесь эквивалент?
В настоящее время я использую P / Invoke с C #, но я не верю, чтодолжно иметь значение - любой ответ должен быть сфокусирован на требованиях и использовании Windows API.Это был бы такой же вопрос, если бы я использовал RegNotifyChangeKeyValue
/ CreateEvent
/ WaitForSingleObject
из VC ++.