0

listBox を使用して axWindowsMediaPlayer でメディア ファイルを再生しています。このフォームでは、タイマーを使用した時間間隔の後に次のメディアが再生されます。その時間間隔の間、画面にカウントダウン タイマーを表示したいと考えています。方法this..plz help. メディア エンドでタイマーを使用しているコードは次のとおりです。

   System.Timers.Timer _timer = new System.Timers.Timer();
    object _locker = new object();
     Player.PlayStateChange += Player_PlayStateChange;

        _timer.Elapsed += _timer_Elapsed;
        _timer.Interval = 3000;
    void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {

        _timer.Stop();
        lock (_locker)
        {
            this.Invoke((MethodInvoker)delegate
        {
            if (listBox2.SelectedIndex + 1 < listBox2.Items.Count)
            {

                listBox2.SelectedItem = listBox2.Items[listBox2.SelectedIndex + 1];
            }
        });
        }
    }

    void Player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {
               _timer.Start();


        }
        else if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady)
        {

                Player.Ctlcontrols.play();


        }
    }  
4

2 に答える 2

0

_timer_Elapsed() カウンターを入れるだけです

private int m_counter=0;

メディアごとに0にします(メディアが開始した後としましょう)

counter.ToString() を表示する Label を作成します。

于 2013-01-17T07:13:14.997 に答える
0
    private  int totalwaittime = 5;
    private  int counter = 0;
    private static void OnTimer(object sender, ElapsedEventArgs elapsedEventArgs)
    {
        counter++;
        Label1.text = String.Format("Time Left : {0}", totalwaittime - counter);
        if (totalwaittime - counter == 0)
        {
            timer.Enabled = false;
            //play next file
        }
    }

    void Player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {
            counter = 0;
            timer.Enabled = true;


        }
        else if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady)
        {

            Player.Ctlcontrols.play();


        }
    }
于 2013-01-17T07:13:44.973 に答える