//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); }