Inheritance: System.EventArgs
        private void qtPlayer_StatusUpdate(object sender, AxQTOControlLib._IQTControlEvents_StatusUpdateEvent e)
        {
            Logger.Info("StatusUpdate: " + e.statusMessage);
            // Status update event handler
            // Handle movie fullscreen events

            /*
                qtMovieLoadStateError = -1,
                qtStatusNone = 0,
                qtStatusConnecting = 2,
                qtStatusNegotiating = 5,
                qtStatusRequestedData = 11,
                qtStatusBuffering = 12,
                qtMovieLoadStateLoading = 1000,
                qtMovieLoadStateLoaded = 2000,
                qtStatusURLChanged = 4096,
                qtStatusFullScreenBegin = 4097,
                qtStatusFullScreenEnd = 4098,
                qtStatusMovieLoadFinalize = 4099,
                qtMovieLoadStatePlayable = 10000,
                qtMovieLoadStatePlaythroughOK = 20000,
                qtMovieLoadStateComplete = 100000,
            */

            switch ((QTStatusCodesEnum)e.statusCode)
            {
                // fullscreen begin
                case QTStatusCodesEnum.qtStatusFullScreenBegin:
                    this.Hide();	// hide movie window
                    break;

                // fullscreen end
                case QTStatusCodesEnum.qtStatusFullScreenEnd:
                    qtPlayer.SetScale(1);	// set back to a reasonable size
                    this.Show();	// show movie window again
                    break;

                case QTStatusCodesEnum.qtMovieLoadStateError:
                    var playerErrorEventArgs = new PlayerErrorEventArgs();
                    playerErrorEventArgs.ErrorMessage = "We couldn't load the movie!";
                    playerErrorEventArgs.SupportID = "ErrorLoadingVideo";
                    if (PlayerError != null)
                        PlayerError(sender, playerErrorEventArgs);
                    break;

                case QTStatusCodesEnum.qtMovieLoadStateComplete:
                    var openStateEventArgs = new OpenStateChangedEventArgs();
                    openStateEventArgs.OpenState = GenericPlayerControl.OpenStates.Open;
                    if (OpenStateChanged != null)
                        OpenStateChanged(sender, openStateEventArgs);
                    break;
            }
        }
        private void wmPlayer_MediaError(object sender, _WMPOCXEvents_MediaErrorEvent e)
        {
            try
            // If the Player encounters a corrupt or missing ioItem,
            // show the hexadecimal error code and URL.
            {

                var errSource = e.pMediaObject as WMPLib.IWMPMedia2;
                if (errSource != null)
                {
                    WMPLib.IWMPErrorItem errorItem = errSource.Error;
                    Logger.Error("Error " + errorItem.errorCode.ToString("X") + " in " + errSource.sourceURL);

                    AnalyticsHelper.FireEvent("WMP Error - " + errorItem.errorCode.ToString("X"));
                    AnalyticsHelper.FireEvent("WMP Error - " + errorItem.errorCode.ToString("X") + " - " + Path.GetExtension(errSource.sourceURL));

                    try
                    {
                        FileInfo fileInfo = new FileInfo(errSource.sourceURL);
                        UploadMediaInfo(fileInfo, errorItem.errorCode.ToString("X"));
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Error creating FileInfo for " + errSource.sourceURL + ": " + ex);
                    }

                    if (PlayerError != null)
                    {
                        var playerErrorEventArgs = new PlayerErrorEventArgs();

                        if (errorItem.errorCode.ToString("X") == "C00D1199")
                        {
                            playerErrorEventArgs.ErrorMessage = "Ah bummer! We had trouble playing your video. This is most likely due to a missing codec." + Environment.NewLine + Environment.NewLine +
                                "The easiest fix is to download the free K-Lite Codec pack. Would you like to do that now?";
                            playerErrorEventArgs.SupportID = "WMPErrorC00D1199";
                        }
                        else
                        {
                            playerErrorEventArgs.ErrorMessage = "Error loading video! Please make sure you can play this video in Windows Media Player." + Environment.NewLine + Environment.NewLine +
                                "Error code: " + errorItem.errorCode.ToString("X") + Environment.NewLine + Environment.NewLine +
                                "Would you like to open a support ticket?";
                            playerErrorEventArgs.SupportID = "ErrorLoadingVideo";
                        }

                        PlayerError(sender, playerErrorEventArgs);
                    }

                }
                else
                    Logger.Error("Unknown error!");

            }
            catch (InvalidCastException ex)
            // In case pMediaObject is not an IWMPMedia item.
            {
                Logger.Error("Exception thrown: " + ex);
            }
        }
        private void videoPlayer_PlayerError(object sender, PlayerErrorEventArgs e)
        {
            _hourGlass.Dispose();

            if (MainModel.isQuickTimeInstalled == false)
                installQuickTimeLinkLabel.Visible = true;

            if (e.ErrorMessage.Length == 0)
                return;

            if (MessageBox.Show(e.ErrorMessage, "Error playing video", MessageBoxButtons.YesNo, MessageBoxIcon.Error)
                == DialogResult.Yes)
            {
                SupportHelper.OpenKBArticle(e.SupportID);
            }
        }
        private void handlePlayerError(object sender, PlayerErrorEventArgs e)
        {
            Logger.Info("PlayerError: " + e.ErrorMessage + " (" + e.SupportID + ")");

            if (PlayerError != null)
                PlayerError(sender, e);
        }