![](/img/trans.png)
[英]axWindowsMediaPlayer1_PlayStateChange event not working
[英]playing one video after another using AxWindowsMediaPlayer's PlayStateChange event in C#
我正在嘗試創建一個視頻播放器,使用AxWindowsMediaPlayer一個接一個地播放一組視頻。 它目前在給定集合中播放一個視頻,但不播放其他視頻。 我正在嘗試實現下面示例鏈接中顯示的方法,以便創建由PlayStateChange屬性的Case 8觸發的自動播放方法,“Media Finished Playing”。 但是,即使一個視頻也不是這樣播放的。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd562460(v=vs.85).aspx
如果需要進一步解釋,請告訴我,我很樂意詳細說明。 我非常感謝有關為什么這種方法不起作用的任何見解,我對C#相對較新,並沒有完全掌握代表的所有復雜性。 我是否需要實現for循環以滾動瀏覽視頻數據庫,在此處稱為it.video? 這是我的代碼:
public void playItem(Item it)
{
player.CreateControl();
player.Enabled = true;
player.enableContextMenu = false;
player.uiMode = "none";
player.Name = "player";
player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);
player.URL = it.video;
}
void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (p_onset)
{ player.Ctlcontrols.play(); }
else if (e.newState == 8) // Media Finished
{
PlayNext();
}
else
{
player.Ctlcontrols.play();
if (!Vars.playOne)
{ PlayNext(); }
}
}
使用BeginInvoke更新代碼,需要以某種方式實現EndInvoke:
public void playItem(Item it)
{
WMPLib.IWMPMedia media;
WMPLib.IWMPPlaylist playlist = player.playlistCollection.newPlaylist("myplaylist");
for (int x = 0; x < _presented.count; x++)
{
media = player.newMedia(_presented.getItem(x).video);
playlist.appendItem(media);
}
player.currentPlaylist = playlist;
player.PlayStateChange += player_PlayStateChange;
}
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 8)
{
this.player.BeginInvoke(new Action(() =>
{
if (p_onset)
{
player.Ctlcontrols.play();
}
else
{
if (!Vars.playOne)
{
//playQueue++;
//PlayNext();
}
}
}));
}
}
實現我的特定目的的最佳方式是使用播放列表方法。 延遲代碼似乎會導致問題。 這是我的解決方案:
public void playItem(ItemsPool it)
{
player.CreateControl();
player.Enabled = true;
player.enableContextMenu = false;
player.uiMode = "none";
player.Name = "player";
player.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
WMPLib.IWMPMedia media;
WMPLib.IWMPPlaylist playlist = player.playlistCollection.newPlaylist("myplaylist");
for (int x = 0; x < it.count; x++)
{
media = player.newMedia(it.getItem(x).video);
playlist.appendItem(media);
}
player.currentPlaylist = playlist;
if (p_onset)
{ player.Ctlcontrols.play(); }
else
{
if (!Vars.playOne)
{ PlayNext(); }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.