0

Interop.WMPLib.dll を使用して Windows Mobile 6.x で mp3 ファイルを再生していますが、GC がそれ自体をきれいに破棄することはできません。実行時間の長いアプリ (1 時間以上) では、短い mp3 (20 ~ 30 秒) を 5 分ごとに再生する必要があるため、GC でライブラリを正しく破棄しないわけにはいきません。1つの解決策が@ajhvdbによってSOで議論されました(プレーヤーを使用するときにこの単純なモバイルフォームが閉じられないのはなぜですか)が、タイマーハックが一貫していないため(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");
    }
4

1 に答える 1

0

MSDN の記事から AxHost のものを使用していますか? もしそうなら、オブジェクトがきれいに破壊されない原因となるバグがあります。

于 2010-07-02T14:16:11.037 に答える