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に追加します-メソッド:

    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();
    }

dispatcherTimerPlayclickイベントの外部にオブジェクトを作成し、次の方法でのみ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 に答える