/// <summary> /// ThreadMainStartup - Start RAPI connection. /// </summary> private void ThreadMainStartup() { // Allocate structure for call to CeRapiInitEx Rapi.RAPIINIT ri = new Rapi.RAPIINIT(); ri.cbSize = Marshal.SizeOf(ri); // Call init function int hr = Rapi.CeRapiInitEx(ref ri); // Wrap event handle in corresponding .NET object ManualResetEvent mrev = new ManualResetEvent(false); mrev.Handle = ri.heRapiInit; // Wait five seconds, then fail. if (mrev.WaitOne(5000, false) && ri.hrRapiInit == Rapi.S_OK) { // Notify caller that connection established. itReason = INVOKE_STARTUP.STARTUP_SUCCESS; m_ctlInvokeTarget.Invoke(m_deleCallback); } else { // On failure, disconnect from RAPI. Rapi.CeRapiUninit(); strBuffer = "Timeout - no device present."; itReason = INVOKE_STARTUP.STATUS_MESSAGE; m_ctlInvokeTarget.Invoke(m_deleCallback); // Notify caller that connection failed. itReason = INVOKE_STARTUP.STARTUP_FAILED; m_ctlInvokeTarget.Invoke(m_deleCallback); } }