예제 #1
0
        //Media Session Callback

        private CarenResult CallbackMediaSession_OnInvoke(ICarenMFAsyncResult Param_AsyncResult)
        {
            //Variavel que vai ser retornada.
            CarenResult Resultado = ResultCode.SS_OK;

            //Variaveis utilizadas.
            ICarenMFMediaEvent OutEvent     = null;
            CA_MediaEventType  OutEventType = CA_MediaEventType.MEUnknown;

            //Obtém o evento gerado.
            Resultado = myMediaSession.MediaSession.EndGetEvent(Param_AsyncResult, out OutEvent);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar obter o evento da media session!", true);

                //Sai do método.
                goto Done;
            }

            //Obtém o tipo do evento.
            Resultado = OutEvent.GetType(out OutEventType);

            //Verifica se não houve erro
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //Falhou ao realizar a operação.

                //Chama uma mensagem de erro.
                ShowMensagem("Ocorreu uma falha ao tentar obter o tipo do evento da media session!", true);

                //Sai do método.
                goto Done;
            }

            //Chama o método para processar o evento
            ProcessarEventoMediaSession(OutEventType, ref OutEvent);

            //Verifica se a media session não foi fechada antes de requisitar o proximo evento.
            if (StatusPlayback != StatusRendering.Closed)
            {
                //Chama o proximo evento na lista.
                Resultado = myMediaSession.MediaSession.BeginGetEvent(myMediaSession.CallbackMediaSession, null);

                //Verifica se não houve erro
                if (Resultado.StatusCode != ResultCode.SS_OK)
                {
                    //Falhou ao realizar a operação.

                    //Chama uma mensagem de erro.
                    ShowMensagem("Ocorreu uma falha ao tentar solicitar o proximo evento assincrona da Media Session!", true);

                    //Sai do método.
                    goto Done;
                }
            }

            Done :;
            //Libera o ponteiro para o evento.
            SafeReleaseInterface(OutEvent);

            //Retorna o resultado.
            return(Resultado);
        }