3

動作しないシナリオをクリックしたものの、GoToPlaylistItemとの違いを理解できません。 GoToPlaylistItemOnNextTickGoToPlaylistItemOnNextTickGoToPlaylistItem

違いがあるかどうか疑問に思う場合は、この投稿GoToPlaylistItemOnNextTickを見て、 null例外をスローしているときに使用して解決された問題を確認してくださいGoToPlaylistItem

私が定義にナビゲートしている間、私は以下の詳細を得ました。誰か説明してもらえますか?

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

1 に答える 1

1

MediaPlayerTimer内部で使用します。このタイマーは、次のように保護されたメソッドで作成され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);
    }
}

このメソッドGoToPlaylistItemOnNextTickは、いくつかの内部変数を設定するだけです。

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

次回タイマーが来ると、OnTimerTickが呼び出され、これが上記の変数をチェックしてから、次のように呼び出しますGoToPlaylistItem

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

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

    [...]
}

したがって、違いは、次のタイマーティックで実行するのGoToPlaylistItemに対し、すぐに次のプレイリスト項目に移動することです。GoToPlaylistItemOnNextTick使用する特定のタイマーはですSystem.Windows.Threading.DispatcherTimer。これによりGoToPlaylistItem、UIスレッドがアイドル状態のときに呼び出されるようになります。

MediaPlayerたとえば、発生するイベントの一部に依存している場合、違いは重要になる可能性がありますStateChanged。を呼び出すとGoToPlaylistItem、このイベントは戻る直前に実行されGoToPlaylistItemます。を呼び出すGoToPlaylistItemOnNextTickと、イベントは後で現在のメソッドが終了し、UIスレッドがアイドル状態になったときにのみ発生します。

于 2010-09-21T08:29:35.737 に答える