Как правильно отменить RegNotifyChangeKeyValue? - PullRequest
0 голосов
/ 30 января 2019

Асинхронное использование 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 ++.

1 Ответ

0 голосов
/ 30 января 2019

Достаточно закрыть открытый ключ реестра.Когда ключ закрыт, событие сигнализируется.Это задокументированное поведение .Поэтому просто обязательно закройте ключ реестра, прежде чем освободить событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...