0

我想要做的是每 10 秒后暂停一个视频视频应该在每 10 秒后暂停,直到视频结束

下面给出的代码给出了意想不到的结果,视频在第一次(即 10 秒后)暂停正常,但是当我再次播放时,它应该在 10 秒后暂停,但在我的情况下,它有时会在 8 秒、3 秒、5 秒等时随机暂停,我该怎么办? ? 请帮忙谢谢!!

void PlayClick(object sender, EventArgs e)
{
             VideoControl.Play();
            var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
            dispatcherTimer.Start();
 }

 private void dispatcherTimer_Tick(object sender, EventArgs e)
        {

            VideoControl.Pause();
        }
4

3 回答 3

1
  1. 在你的 dispatcherTimer_Tick-Method 中添加这个:

    dispatcherTimer.Stop();
    
  2. 将以下部分移动到构造函数中:

    dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
    dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
    
  3. 使 DispatcherTimer 成为全局变量。

编辑:这应该是这样的:

    class MyClass
    {
        private DispatcherTimer _dispatcherTimer; //now your dispatcherTimer is accessible everywhere in this class

        public MyClass()
        {
            _dispatcherTimer = new DispatcherTimer();
            _dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            _dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
        }

        void PlayClick(object sender, EventArgs e)
        {
            VideoControl.Play();
            _dispatcherTimer.Start();
        }

        void dispatcherTimer_Tick(object Sender, EventArgs e)
        {
            _dispatcherTimer.Stop();
            VideoControl.Pause();
        }
    }
于 2012-09-26T17:52:40.140 回答
1

将定时器的声明放到一个私有类变量中,将几行移到类的构造函数中,然后在Tick处理程序中停止定时器。

您不想继续创建计时器的原因是因为计时器涉及非托管资源,因此您正在关闭该循环。

private dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); 

ctor
{
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 10); 
}

void PlayClick(object sender, EventArgs e) 
{ 
    VideoControl.Play(); 
    dispatcherTimer.Start(); 
} 

private void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    dispatchTimer.Stop();
    VideoControl.Pause(); 
} 
于 2012-09-26T17:52:57.770 回答
0

Tick在事件中尝试以下代码:

private void dispatcherTimer_Tick(object sender, EventArgs e)
    { 
        (sender as DispatcherTimer).Stop();
        VideoControl.Pause();
    }

您可以dispatcherTimer在 Playclick 事件之外创建对象,并且只能通过以下方式将Start()方法放入 PlayClick事件中:

var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
public Form1() //// form constructor where you are handling these all event....
{
     dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
     dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
}

void PlayClick(object sender, EventArgs e)
{
            VideoControl.Play();
            dispatcherTimer .Start();
}
于 2012-09-26T17:52:54.400 回答