The documentation for RegisterWaitForSingleObject says
Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Win32 API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread. Instead of a Mutex, use a Semaphore with a maximum count of 1.
and (in the documentation for the WaitHandle argument) it says
Use a WaitHandle other than Mutex
This seems to imply that it's safe to use an Event -- is it?
Would there be any difference between using an AutoResetEvent and a ManualResetEvent?