WMPLib.dll не работает Dispose () правильно.Как я могу играть в mp3 на Windows Mobile? - PullRequest
0 голосов
/ 02 июля 2010

Использование Interop.WMPLib.dll для воспроизведения mp3-файлов на Windows Mobile 6.x, но я не могу заставить GC полностью утилизировать себя. Мне нужно проигрывать короткие mp3 (20-30 секунд) каждые 5 минут для долго работающего приложения (один час или более), поэтому я не могу позволить, чтобы сборщик мусора правильно утилизировал библиотеку. Одно решение было обсуждено на SO ( Почему эта простая мобильная форма не закрывается при использовании проигрывателя ) @ajhvdb, но это не достаточно хорошее решение для меня, потому что взлом таймера не согласуется (мне нужно было иногда использовать время 10 000 и более).

Может кто-нибудь порекомендовать лучший способ обработки Dispose () или просто другой способ получения файлов mp3, воспроизводимых с помощью Windows Mobile 6.x?

То, что у меня сейчас есть (спасибо @ajhvdb):

public void Dispose()
    {
        try
        {
            Stop();
        }
        catch (Exception)
        {
        }
        // need this otherwise the process won't exit?!
        try
        {
            int ret = Marshal.FinalReleaseComObject(myPlayer);
        }
        catch (Exception)
        {
        }
        myPlayer = null;
        GC.Collect();

        //If you don't do this, it will not quit
        //http://www.eggheadcafe.com/software/aspnet/31363254/media-player-freezing-app.aspx
        for (int s = 0; s < 100; s++)
        {
            Application.DoEvents();
            Thread.Sleep(1);
        }
        GC.WaitForPendingFinalizers();

        //MessageBox.Show("Application Exiting");
    }

1 Ответ

0 голосов
/ 02 июля 2010

Используете ли вы AxHost из статьи MSDN ?Если это так, то в есть ошибка , из-за которой объекты не могут быть полностью уничтожены.

...