开发者

What is the difference between GoToPlaylistItem and GoToPlaylistItemOnNextTick

Unable to understand the difference bettwen GoToPlayl开发者_Go百科istItem and GoToPlaylistItemOnNextTick, though GoToPlaylistItemOnNextTick clicked on scenarios where GoToPlaylistItem din't work.

If you wonder if there are any differences, Have a look at this Post for a problem solved by using GoToPlaylistItemOnNextTick while it was throwing null exception with GoToPlaylistItem

While I naviaged to the defination I got the following details. Could some one explain?

[ScriptableMember]
public virtual void GoToPlaylistItem(int playlistItemIndex);
public void GoToPlaylistItemOnNextTick(int playlistItemIndex);


MediaPlayer uses a Timer internally. This timer is created in a protected method called CreatePositionTimer:

protected void CreatePositionTimer(TimeSpan interval)
{
    if (m_timer == null)
    {
        m_timer = new DispatcherTimer();
        m_timer.Interval = interval; // 6 NTSC frames
        m_timer.Tick += new EventHandler(OnTimerTick);
    }
}

The method GoToPlaylistItemOnNextTick simply sets a few internal variables:

public void GoToPlaylistItemOnNextTick(int playlistItemIndex)
{
    if (!m_goToItemOnNextTick) // don't set it if already set
    {
        m_goToItemOnNextTick = true;
        m_goToItemOnNextTickIndex = playlistItemIndex;
    }
}

The next time the timer comes around, OnTimerTick is called, and this checks for the above variables and then calls GoToPlaylistItem:

void OnTimerTick(object sender, EventArgs e)
{
    [...]

    if (m_goToItemOnNextTick)
    {
        m_goToItemOnNextTick = false;
        GoToPlaylistItem(m_goToItemOnNextTickIndex);
    }

    [...]
}

So the difference is that GoToPlaylistItem will go to the next playlist item immediately, while GoToPlaylistItemOnNextTick will do it at the next timer tick. The specific timer it uses is System.Windows.Threading.DispatcherTimer. This ensures that GoToPlaylistItem will be called when the UI thread is idle.

The difference may be significant if you rely on some of the events that MediaPlayer fires, for example StateChanged. If you call GoToPlaylistItem, this event will execute immediately before GoToPlaylistItem returns. If you call GoToPlaylistItemOnNextTick, then the event will only occur later when your current method has finished and the UI thread is idle.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜