0

我在 C# WinForm 中有一个代码,它应该能够从 a 读取歌曲列表,listBox然后播放每首歌曲windowsMediaPlayer (出于某些原因,我想播放从 the 最后一项listBox到第一项的歌曲)。

这是我正在使用的代码:

            int count = listBox1.Items.Count-1;
            listBox1.SelectedItem = listBox1.Items[count];
            axWindowsMediaPlayer1.URL = listBox1.SelectedItem.ToString();
            axWindowsMediaPlayer1.Ctlcontrols.play();

然后当播放第一首歌结束时,我想改变url这样的:

  private void axWindowsMediaPlayer1_PlayStateChange_1(object sender, _WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {

            if (count > 0)
            {
                count = count - 1;
                axWindowsMediaPlayer1.URL = listBox1.Items[count].ToString();
                axWindowsMediaPlayer1.Ctlcontrols.play();

            }
        }
    }

此代码将播放第一首歌曲。但是在这一行axWindowsMediaPlayer1.URL = listBox1.Items[count].ToString();我得到了COM Exception ERRORWindowsMediaPlayer 控件没有播放列表中的其他歌曲。

这是错误详细信息:

   System.Runtime.InteropServices.COMException was unhandled by user code
   Message=Exception from HRESULT: 0xC00D1325
   Source=Interop.WMPLib
   ErrorCode=-1072884955
   StackTrace:
   at WMPLib.IWMPPlayer4.set_URL(String pbstrURL)
   at AxWMPLib.AxWindowsMediaPlayer.set_URL(String value)
   at Avaye_Malakooti_92.Form1.axWindowsMediaPlayer1_PlayStateChange_1(Object sender, _WMPOCXEvents_PlayStateChangeEvent e) in C:\Users\Novin Pendar\Documents\Visual Studio 2010\Projects\New folder\Avaye Malakooti 92\Avaye Malakooti 92\Form1.cs:line 459
   at AxWMPLib.AxWindowsMediaPlayer.RaiseOnPlayStateChange(Object sender, _WMPOCXEvents_PlayStateChangeEvent e)
   at AxWMPLib.AxWindowsMediaPlayerEventMulticaster.PlayStateChange(Int32 newState)
   InnerException: 

这是错误

任何人都知道为什么我会收到那个错误或者我应该如何解决它?感谢帮助 。

4

2 回答 2

2

对该 HRESULT 代码的简单谷歌搜索将其指定为值:

0xC00D1325
NS_E_CURL_INVALIDCHAR
The URL contains one or more characters that are not valid.

因此,您似乎没有将播放器指向第二首歌曲的有效网址。

您可以在此处查看 HRESULT 代码列表

于 2013-07-24T17:06:38.253 回答
0

我解决了不播放其他歌曲的问题,通过Timer在我的代码中添加这样的:

 private void axWindowsMediaPlayer1_PlayStateChange_1(object sender, _WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {
            if (count > 0)
            {
                count = count - 1;
                axWindowsMediaPlayer1.URL = listBox1.Items[count].ToString();
                timer2.Enabled = true;

            }
        }
    }

然后将此代码放入我的Timer2_Tick活动中:

private void timer2_Tick(object sender, EventArgs e)
    {
        axWindowsMediaPlayer1.Ctlcontrols.play();
        timer2.Enabled = false;
    } 

希望这个解决方案能帮助和我有同样问题的每个人。

于 2013-07-24T18:21:36.813 回答