取消RegNotifyChangeKeyValue的正确方法是什么?

时间:2019-01-30 00:23:25

标签: windows winapi registry

RegNotifyChangeKeyValue的异步用法非常简单:将事件对象传递给它,然后等待事件被通知。

什么不是那么清楚,但是,是取消通知请求的正确方法。例如,如果已在等待中设置了超时,例如:

RegNotifyChangeKeyValue(hKey, false, REG_NOTIFY_CHANGE_LAST_SET, regEvent.SafeWaitHandle, true);
regEvent.WaitOne(TimeSpan.FromMinutes(30))

如果发生超时,而不通知点火,该通知是左想必未决和等待火灾。这是更坏,如果通知和等待是一个循环内,潜在的许多注册通知(一个用于每个过期超时)。

我是否只关闭了事件句柄(regEvent)和注册表项句柄(hKey)?还有什么我需要打电话的吗目录更改通知中有FindCloseChangeNotification,这里是否有等效项?


我目前正在使用C#进行P / Invoke,但我认为这不会有所作为-任何答案都应集中在Windows API的要求和用法上。如果我使用了VC ++中的RegNotifyChangeKeyValue / CreateEvent / WaitForSingleObject,这将是相同的问题。

1 个答案:

答案 0 :(得分:3)

关闭打开的注册表项就足够了。当按键关闭时,会发出事件信号。这是documented behavior。因此,只需确保在释放事件之前关闭注册表项即可。