public System.IntPtr WndProcCallback(System.IntPtr hWnd, int msg, System.IntPtr wParam, System.IntPtr lParam)
    {
        OnWindowMessageParams msgParams = new OnWindowMessageParams();

        msgParams.hWnd   = hWnd;
        msgParams.msg    = msg;
        msgParams.wParam = wParam;
        msgParams.lParam = lParam;
        switch (msg)
        {
        case WM_CREATE:
            m_BackgroundWorker.ReportProgress(31, msgParams);
            break;

        case WM_INPUT:
            m_BackgroundWorker.ReportProgress(32, msgParams);
            break;

        case WM_CLOSE:
            m_BackgroundWorker.ReportProgress(33, msgParams);
            PostQuitMessage(m_exitCode);
            //0)
            if (!m_BackgroundWorker.CancellationPending)
            {
                m_BackgroundWorker.CancelAsync();
            }
            break;

        default:
            return(DefWindowProc(hWnd, msg, wParam, lParam));
        }
        return(System.IntPtr.Zero);
    }
 private void m_BackgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
 {
     if (((e.UserState != null)))
     {
         int iRet = e.ProgressPercentage;
         if ((object.ReferenceEquals(e.UserState.GetType(), typeof(MSG))))
         {
             m_messageCount += 1;
             MSG msg = (MSG)e.UserState;
             if ((((OnNativeGetMessage != null)) && (OnNativeGetMessage.GetInvocationList().Length > 0)))
             {
                 RaiseEventUtility.RaiseEventAndExecuteItInTheTargetThread(OnNativeGetMessage, new object[] {
                     this,
                     m_messageCount,
                     iRet,
                     msg
                 });
             }
         }
         else if ((object.ReferenceEquals(e.UserState.GetType(), typeof(OnWindowMessageParams))))
         {
             OnWindowMessageParams msgParams = (OnWindowMessageParams)e.UserState;
             if (iRet == 31)
             {
                 if ((((OnWindowsMessageCreate != null)) && (OnWindowsMessageCreate.GetInvocationList().Length > 0)))
                 {
                     RaiseEventUtility.RaiseEventAndExecuteItInTheTargetThread(OnWindowsMessageCreate, new object[] {
                         msgParams.hWnd,
                         msgParams.msg,
                         msgParams.wParam,
                         msgParams.lParam
                     });
                 }
             }
             else if (iRet == 32)
             {
                 if ((((OnWindowsMessageInput != null)) && (OnWindowsMessageInput.GetInvocationList().Length > 0)))
                 {
                     RaiseEventUtility.RaiseEventAndExecuteItInTheTargetThread(OnWindowsMessageInput, new object[] {
                         msgParams.hWnd,
                         msgParams.msg,
                         msgParams.wParam,
                         msgParams.lParam
                     });
                 }
             }
             else if (iRet == 33)
             {
                 if ((((OnWindowsMessageClose != null)) && (OnWindowsMessageClose.GetInvocationList().Length > 0)))
                 {
                     RaiseEventUtility.RaiseEventAndExecuteItInTheTargetThread(OnWindowsMessageClose, new object[] {
                         msgParams.hWnd,
                         msgParams.msg,
                         msgParams.wParam,
                         msgParams.lParam
                     });
                 }
             }
         }
     }
 }