Почему эта простая мобильная форма не закрывается при использовании плеера

Я создал этот простой образец формы с кнопкой закрытия.

Все работает, как и ожидалось, если не использовать Interop.WMPLib.dll

Я видел другие приложения, использующие это без проблем, но почему процесс Form не закрывается, когда я просто добавляю строку:

SoundPlayer myPlayer = new SoundPlayer();

и конечно распоряжаться им:

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

Форма закрывается, но отладчик VS2008 все еще активен. Проект Form и DLL все еще активны.

Если вы отправите мне электронное письмо по адресу [email protected], я отправлю вам сжатый проект.

Ниже приведен класс для DLL:

используя Систему; using System.Collections.Generic; используя System.Text; используя System.Threading; using System.Runtime.InteropServices; используя WMPLib;

пространство имен WindowsMobile.Utilities {открытый делегат void SoundPlayerStateChanged (отправитель SoundPlayer, 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
}
}

Ответы на вопрос(2)

Ваш ответ на вопрос