C# 播放后如何删除WMP播放列表?

C# 播放后如何删除WMP播放列表?,c#,.net,wmp,C#,.net,Wmp,我正在编写一个应用程序,它在图片框控件中按顺序显示一些静态图像(幻灯片),然后使用windows media player WMP控件播放几个MP4文件。视频文件被转储到文件夹中,并在每个循环中动态创建播放列表,这样,如果文件夹的内容发生更改,新的播放列表也将刷新 出现了一个问题,我对此进行了研究,但无法找出代码中的错误,因为建议的修复似乎不起作用 鉴于: 我的幻灯片和视频播放正确。但每次播放视频时,都会在本地“.\Music\Playlists”文件夹中创建一个新的“myplaylist.wp

我正在编写一个应用程序,它在图片框控件中按顺序显示一些静态图像(幻灯片),然后使用windows media player WMP控件播放几个MP4文件。视频文件被转储到文件夹中,并在每个循环中动态创建播放列表,这样,如果文件夹的内容发生更改,新的播放列表也将刷新

出现了一个问题,我对此进行了研究,但无法找出代码中的错误,因为建议的修复似乎不起作用

鉴于: 我的幻灯片和视频播放正确。但每次播放视频时,都会在本地“.\Music\Playlists”文件夹中创建一个新的“myplaylist.wpl”文件,它们以编号扩展名累积在该文件夹中,例如: 我的播放列表(1), 我的播放列表(2), 我的播放列表(3), 我的播放列表(4), 我的播放列表(5)等,直到我的播放列表(1999)

此时,当有2000个(包括基本文件“myplaylist”)时,WMP崩溃并出现灾难性错误

灾难性故障(HRESULT的异常:0x8000FFFF(E_意外))但它们都不工作

这种行为在网上的几个地方都有记录,我尝试使用这里的建议:和这里

我正在使用player_PlayStateChange事件触发一个新的代码块,该代码块仅在WMP播放器处于“就绪状态”时触发,不再使用播放列表,如下所示:

    private void player_PlayStateChange(object sender, 
 AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {            
                    switch (e.newState)
            {
                    case 10:   // Ready
                    currentStateLabel.Text = "Ready";                      
                    vidcounter++;
                    counter = 0;
                    ImageTimer.Start();
                    wmp.playlistCollection.remove(myplaylist);               
            }
        }

我希望在调用.remove(myplaylist)后该文件会消失,但该文件不会删除。如果您对此有任何了解,我们将不胜感激。

我们无法看到您的PlayStateChange事件处理程序。但是这个问题很常见,您不能对该处理程序中的WMP对象执行任何操作。只是为了更新你的用户界面。解决方法是使用UI的BeginInvoke()方法,以便在处理事件并且WMP对象再次处于安全状态后,代码稍后运行。谢谢。我在上面添加了PlayStateChanged事件代码供您查看。对不起,我从一开始就应该这么做。我正在等待,直到玩家处于就绪状态。
    private void player_PlayStateChange(object sender, 
 AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {            
                    switch (e.newState)
            {
                    case 10:   // Ready
                    currentStateLabel.Text = "Ready";                      
                    vidcounter++;
                    counter = 0;
                    ImageTimer.Start();
                    wmp.playlistCollection.remove(myplaylist);               
            }
        }