Ejemplo n.º 1
0
        /// <summary>
        /// Called when an asynchronous DVD command is completed.
        /// </summary>
        /// <param name="p1">The command event handle.</param>
        private void OnCmdComplete(IntPtr p1)
        {
            try
            {
                ServiceRegistration.Get <ILogger>().Debug("DVD OnCmdComplete");
                if (!_pendingCmd || _dvdInfo == null)
                {
                    return;
                }

                IDvdCmd cmd;
                int     hr = _dvdInfo.GetCmdFromEvent(p1, out cmd);
                if (hr != 0 || cmd == null)
                {
                    ServiceRegistration.Get <ILogger>().Debug("DVDPlayer: DVD OnCmdComplete GetCmdFromEvent failed");
                    return;
                }

                if (cmd != _cmdOption)
                {
                    ServiceRegistration.Get <ILogger>().Debug("DVDPlayer: DVD OnCmdComplete UNKNOWN CMD!!!");
                    Marshal.ReleaseComObject(cmd);
                    return;
                }

                Marshal.ReleaseComObject(cmd);
                Marshal.ReleaseComObject(_cmdOption);
                _cmdOption  = null;
                _pendingCmd = false;
                ServiceRegistration.Get <ILogger>().Debug("DVDPlayer: DVD OnCmdComplete OK.");
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Debug("DVDPlayer: OnCmdComplete() {0} {1} {2}", ex.Message, ex.Source, ex.StackTrace);
            }
        }