Why is this simple Mobile Form not closed when using the player

Posted by ajhvdb on Stack Overflow See other posts from Stack Overflow or by ajhvdb
Published on 2010-04-23T16:23:02Z Indexed on 2010/04/23 16:23 UTC
Read the original article Hit count: 250

Filed under:
|
|

Hi,

I created this simple sample Form with the close button.

Everything is working as expected when NOT using the Interop.WMPLib.dll

I've seen other applications using this without problems but why isn't the Form process closed when I just add the line:

SoundPlayer myPlayer = new SoundPlayer();

and of course dispose it:

if (myPlayer != null)
            {
                myPlayer.Dispose();
                myPlayer = null;
            }

The Form closes but the debugger VS2008 is still active. The Form project and the dll are still active.

If you send me an email to [email protected], I can send you the zipped project.

Below is the class for the dll:

using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Runtime.InteropServices; using WMPLib;

namespace WindowsMobile.Utilities { public delegate void SoundPlayerStateChanged(SoundPlayer sender, SoundPlayerState newState);

public enum SoundPlayerState
{
    Stopped,
    Playing,
    Paused,
}


public class SoundPlayer : IDisposable
{
    [DllImport("coredll")]
    public extern static int waveOutSetVolume(int hwo, uint dwVolume);

    [DllImport("coredll")]
    public extern static int waveOutGetVolume(int hwo, out uint dwVolume);

    WindowsMediaPlayer myPlayer = new WindowsMediaPlayer();

    public SoundPlayer()
    {
        myPlayer.uiMode = "invisible";
        myPlayer.settings.volume = 100;
    }

    string mySoundLocation = string.Empty;

    public string SoundLocation
    {
        get { return mySoundLocation; }
        set { mySoundLocation = value; }
    }

    public void Pause()
    {
        myPlayer.controls.pause();
    }

    public void PlayLooping()
    {
        Stop();
        myPlayer.URL = mySoundLocation;
        myPlayer.settings.setMode("loop", true);
    }

    public int Volume
    {
        get { return myPlayer.settings.volume; }
        set { myPlayer.settings.volume = value; }
    }

    public void Play()
    {
        Stop();
        myPlayer.URL = mySoundLocation;
        myPlayer.controls.play();
    }

    public void Stop()
    {
        myPlayer.controls.stop();
        myPlayer.close();
    }

    #region IDisposable Members

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

    #endregion
}

}

© Stack Overflow or respective owner

Related posts about c#

Related posts about mobile