2010-07-02 21 views
0

L'utilisation de Interop.WMPLib.dll pour lire des fichiers mp3 sur Windows Mobile 6.x, mais je ne peux pas obtenir le GC pour disposer proprement de lui-même. J'ai besoin de jouer un court mp3 (20-30 secondes) toutes les 5 minutes pour une application longue durée (une heure ou plus), donc je ne peux pas me permettre de ne pas disposer du GC correctement. Une solution a été discutée sur SO (Why is this simple Mobile Form not closed when using the player) par @ajhvdb mais ce n'est pas une solution assez bonne pour moi, parce que le bidouillage de minuterie n'est pas cohérent (il fallait parfois utiliser des minutages de 10 000 ou plus).WMPLib.dll ne fonctionne pas correctement avec Dispose(). Comment puis-je lire des fichiers MP3 sur Windows Mobile?

Quelqu'un peut-il recommander une meilleure façon de traiter Dispose() ou juste une autre façon que je peux obtenir des fichiers mp3 en jouant 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"); 
    } 

Répondre