msgwaitformultipleobjects (user32)
Last changed: -116.23.153.213

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern uint MsgWaitForMultipleObjectsEx(uint nCount, IntPtr [] pHandles,
   uint dwMilliseconds, uint dwWakeMask, uint dwFlags);

VB Signature:

    Private Declare Function MsgWaitForMultipleObjects Lib "User32.dll" ( _
                ByVal nCount As Integer, _
                ByVal pHandles() As IntPtr, _
                ByVal bWaitAll As Integer, _
                ByVal dwMilliseconds As Integer, _
                ByVal dwWakeMask As Integer) As Integer

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    Private Const QS_ALLEVENTS As Integer = 1215
    Private Const WAIT_OBJECT_0 As Integer = 0
    Private Const WAIT_FAILED As Integer = -1

    Dim arrHandles(0) As IntPtr
    Dim bAddref As Boolean

    Try
        readyEvent.SafeWaitHandle.DangerousAddRef(bAddref)
        arrHandles(0) = readyEvent.SafeWaitHandle.DangerousGetHandle()

        Select Case MsgWaitForMultipleObjects(1, arrHandles, 1, waitInterval, QS_ALLEVENTS)
        Case WAIT_OBJECT_0
            retcode = True
        Case WAIT_FAILED
            Dim errorCode As Integer = System.Runtime.InteropServices.Marshal.GetLastWin32Error
            Dim errMsg As String = New System.ComponentModel.Win32Exception(errorCode).Message
            Throw New Exception(errMsg)
        Case Else
            Return False
        End Select
    Catch ex As Exception
        Trace.TraceError("TaskInvoker.Execute - {0}", ex.Message)
        Throw
    Finally
        readyEvent.SafeWaitHandle.DangerousRelease()
    End Try

Alternative Managed API:

Do you know one? Please contribute it!

    [DllImport("User32.dll", SetLastError = true)]
    private static extern int MsgWaitForMultipleObjectsEx(
        int nCount,
        [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] IntPtr[] pHandles,
        int dwMilliseconds,
        int dwWakeMask,
        int dwFlags);

Documentation