Использование 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");
}