8

内部に Timer3 tick イベントがあり、timer3 間隔を numericupdown 値に設定します。

private void timer3_Tick(object sender, EventArgs e)
        {
            try
            {
                Image iOLd = this.pictureBox1.Image;
                Image img = Image.FromFile(_files[_indx].FullName);
                trackBar1.Value = _indx;
                label23.Text = _files[_indx].Name;
                this.pictureBox1.Image = img;

                if (iOLd != null)
                    iOLd.Dispose();
                _indx++;

                if (_indx >= _files.Count)
                {
                    _indx = 0;
                    trackBar1.Value = 0;
                }
                timer3.Interval = Convert.ToInt32(numericUpDown1.Value); 
            }
            catch
            {

            }
        }

また、numericupdown valuechanged イベントでも実行しました。

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            timer3.Interval = Convert.ToInt32(numericUpDown1.Value);
        }

問題は、たとえば、プログラムが実行されているときにnumericupdown値を10000に設定し、その動きが非常に遅いため、すぐに値を1に設定するため、代わりにtimer3間隔を1に変更すると有効になり、別のサイクルを待っています10000 の値の場合、timer3 間隔は値 1 として機能します。

私がやりたいことは、numericupdown を 10000 から 1 に変更すると、すぐに変更され、10000 値の別のラウンドを待たないことです。

4

3 に答える 3

18

Windows.Forms.Timer を使用している場合、間隔を変更する前にタイマーを停止してから再起動する必要があります。

timer3.Stop();
timer3.Interval = Convert.ToInt32(numericUpDown1.Value); 
timer3.Start();

MSDN から

Stop を呼び出して Timer を無効にした後で Start を呼び出すと、Timer は中断された間隔を再開します。Timer が 5000 ミリ秒間隔に設定されていて、約 3000 ミリ秒で Stop を呼び出す場合、Start を呼び出すと、Timer は Tick イベントを発生させる前に 5000 ミリ秒待機します。

于 2012-07-24T07:26:04.713 に答える
4

タイマーを停止し、間隔を設定してから、再起動する必要があります。

timer3.Enabled = false;
timer3.Interval = ...;
timer3.Enabled = true;

.NET フレームワークにはいくつかのタイマーの実装があるため、ここで使用したタイマー (System.Timers.Timer) とは異なるタイマーを使用している場合は、Enabled を設定する代わりに Stop() および Start() メソッドを呼び出す必要があります。

于 2012-07-24T07:24:23.917 に答える
0

タイマーを停止し、間隔を設定してからタイマーを再起動します。うまくいくことを願っています

于 2012-07-24T07:26:45.187 に答える