Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

André Marcondes

Não é possível usar o objeto COM que foi separado do seu RCW subjacent

Recommended Posts

Olá. Tenho uma aplicação de Digital Signage que roda uma instância do media player.

 

Eu tenho 3 forms: um form inicial, um form de configuração da aplicação e um form com o media player.

Quando estou no form inicial e clico no botão para abrir o form do media player, o media player é exibido e começa a mostrar diversos vídeos.

 

Quando o form do media player é exibido, o form inicial é ocultado e o media player executa em tela cheia.

 

Então, para parar o player, eu preciso fechá-lo usando as teclas alt + f4.

 

Quando aperto alt + f4, o player termina de tocar o vídeo atual (não sei porque faz isso, não deveria parar imediatamente????) e então um erro é lançado com a seguinte mensagem: "Não é possível usar o objeto COM que foi separado do seu RCW subjacente."

 

Eu sou iniciante em C# e não faço ideia do que está acontecendo. Alguém pode me ajudar?

 

Segue alguns trechos do meu código.

 

Classe do form inicial

namespace SigepomPlayer
{
    public partial class FormInicial : Form
    {
        private FormConfiguracao formConfiguracao;
        private FormPlayer formPlayer;

        public FormInicial()
        {
            InitializeComponent();
            instanciarFormConfiguracao();
            instanciarFormPlayer();
        }

        private void instanciarFormConfiguracao()
        {
            formConfiguracao = new FormConfiguracao();
            formConfiguracao.Owner = this;
        }

        private void instanciarFormPlayer()
        {
            formPlayer = new FormPlayer();
            formPlayer.Owner = this;
        }

        private void buttonConfiguracao_Click(object sender, EventArgs e)
        {
            if (formConfiguracao.IsDisposed) {
                instanciarFormConfiguracao();
            }

            this.formConfiguracao.Show();
            this.formConfiguracao.Focus();
            this.Hide();
        }

        private void buttonAbrirPlayer_Click(object sender, EventArgs e)
        {
            if (formPlayer.IsDisposed) {
                instanciarFormPlayer();
            }

            this.Hide();
            this.formPlayer.Show();
            this.formPlayer.Focus();
        }
    }
}

Trechos da classe do form do player:

 

namespace SigepomPlayer
{
    public partial class FormPlayer : Form
    {
        private string diretorioSigepom = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\sigepom\\files\\";
        private string currentMediaDuration;
        private WebClient client;
        private StringDictionary config;
        private XDocument xmlAgenda;
        private StringCollection arquivosSendoBaixados;

        public FormPlayer()
        {
            InitializeComponent();
        }

        private void FormPlayer_FormClosed(object sender, FormClosedEventArgs e)
        {
            Cursor.Show();
            this.Owner.Show();
        }

        private void FormPlayer_Load(object sender, EventArgs e)
        {
            this.client = new WebClient();
            this.config = ConfigXMLHandler.obterConfiguracao();
            this.arquivosSendoBaixados = new StringCollection();
            this.Visible = true;
            this.axWindowsMediaPlayer1.Visible = true;
            this.pictureBox1.Visible = true;
            Cursor.Hide();
            tocarMidias();
        }

        private void setMediaPlayerURL(string url)
        {
            WMPLib.IWMPPlaylist playlist = axWindowsMediaPlayer1.currentPlaylist;
            WMPLib.IWMPMedia __media = axWindowsMediaPlayer1.newMedia(url);
            playlist.clear();
            playlist.insertItem(0, __media);
            axWindowsMediaPlayer1.currentPlaylist = playlist;
            axWindowsMediaPlayer1.settings.autoStart = false;
            axWindowsMediaPlayer1.Ctlcontrols.play();

            while (axWindowsMediaPlayer1.playState != WMPPlayState.wmppsPlaying) {
                Application.DoEvents();
            }

            currentMediaDuration = axWindowsMediaPlayer1.currentMedia.durationString;
        }
    }
}

o erro acontece no método setMediaPlayerUrl da classe FormPlayer, dentro da condição do while que está nesse método.

 

Espero que alguém possa me ajudar, já estou lidando com esse problema há quase um mês, então não é por falta de tentativa e de pesquisa que ainda não consegui. Simplesmente não sei o que está acontecendo, e isso está me deixando muito puto :@

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.