J'utilise la dll Interop.WMPLib.dll pour lire des fichiers mp3 sur Windows Mobile 6.x, mais je n'arrive pas à faire en sorte que le GC se débarrasse proprement de lui-même. J'ai besoin de lire un court mp3 (20-30 secondes) toutes les 5 minutes pour une application qui dure longtemps (une heure ou plus), donc je ne peux pas me permettre de ne pas laisser le GC se débarrasser correctement de la librairie. Une solution a été discutée sur SO (http://stackoverflow.com/questions/2700219/why-is-this-simple-mobile-form-not-closed-when-using-the-player/2702086#2702086) par @ajhvdb mais ce n'est pas une solution suffisante pour moi, car le hack du timer n'est pas cohérent (j'avais besoin d'utiliser parfois des timings de 10 000 ou plus).
Quelqu'un peut-il me recommander une meilleure façon de gérer Dispose() ou simplement un autre moyen de faire jouer des fichiers mp3 avec Windows Mobile 6.x ?
Ce que j'ai actuellement (grâce à @ajhvdb) est :
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");
}