use EventWaitHandle on your handle in order to wait for it to be signaled.
you are using unmanaged handle so this is an equivalent API to WIN32's WaitForSingleObject(HANDLE h, DWORD duaration();
so this is the C# code:
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset);
handle.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle(yourHandle,true);
handle.WaitOne();
the true
in the SafeWaitHandle
creation indicating that it should clean up along with the finalizer.