Пример #1
0
        private void DetachFromEngine()
        {
            if (m_engine != null)
            {
                Thread.Sleep(500);

                m_engine.OnMessage -= new MessageEventHandler(OnMessage);
                m_engine.OnCommand -= new CommandEventHandler(OnCommand);
                m_engine.OnNoise   -= new NoiseEventHandler(OnNoise);

                try
                {
                    m_engine.Dispose();
                }
                catch
                {
                    // Depending on when we get called, stopping the engine
                    // throws anything from NullReferenceException, ArgumentNullException, IOException, etc.
                }

                m_engine = null;

                if (m_emulatorProcess != null && !m_emulatorProcess.WaitForExit(4000))
                {
                    if (m_emulatorProcess != null && !m_emulatorProcess.HasExited)
                    {
                        m_emulatorProcess.Kill();
                        m_emulatorProcess = null;
                    }

                    foreach (Process p in Process.GetProcessesByName("Microsoft.SPOT.Emulator.Sample.SampleEmulator"))
                    {
                        p.Kill();
                    }
                }

                GC.Collect();
            }

            ///
            /// Make sure process exit thread dies
            ///
            if (m_waitForProc != null && m_waitForProc.IsAlive)
            {
                try
                {
                    if (!m_waitForProc.Join(1000))
                    {
                        m_waitForProc.Abort();
                    }
                }
                catch
                {
                }
            }
        }