MediaPlayer
Timer
内部で使用します。このタイマーは、次のように保護されたメソッドで作成され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スレッドがアイドル状態になったときにのみ発生します。