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