繁体   English   中英

WMPLib.dll没有正确运行Dispose()。 如何在Windows Mobile上播放mp3?

[英]WMPLib.dll not running Dispose() correctly. How can I play mp3s on Windows Mobile?

使用Interop.WMPLib.dll在Windows Mobile 6.x上播放mp3文件,但是我无法让GC彻底清除自身。 对于运行时间较长的应用程序(一个小时或更长时间),我需要每5分钟播放一小段mp3(20-30秒),因此我无法承受GC无法正确处置lib的负担。 @ajhvdb在SO上讨论了一个解决方案( 为什么这个简单的Mobile Form在使用播放器时没有关闭 ),但对我来说这不是一个很好的解决方案,因为计时器hack不一致(有时我需要使用10,000的计时)或者更多)。

有人可以推荐一种更好的处理Dispose()的方法,还是可以让我使用Windows Mobile 6.x播放mp3文件的另一种方法?

我目前所拥有的(感谢@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");
    }

您是否正在使用MSDN文章中的AxHost资料? 如果是这样,则其中存在一个错误,该错误会导致对象无法完全销毁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM