9

'System.Windows.Forms.Timer'を使用してタスクを繰り返しています。しかし、タイマーが開始すると、タスクが開始する前に1つの間隔を待つ必要があります。間隔は10秒に設定されており、タスクに十分な時間を与えることができます。しかし、それが最初に始まるのを待っている「ぎこちない沈黙」があります。タイマーが有効になっているときにTickイベントをトリガーする方法はありますか?(スレッド、コールバック、またはイベントを使用してタスクを繰り返すことができません)

private int counter;
Timer t = new Timer();

private void InitializeTimer()
{
    counter = 0;
    t.Interval = 750;
    t.Enabled = true;

    t.Tick += new EventHandler(timer1_Tick);
}

private void timer1_Tick(object sender, EventArgs e)
{
    if (counter >= 3)
    {
        t.Enabled = false;                
    }
    else
    {
        //do something here
        counter++;
    }
}
4

4 に答える 4

12

メソッドはいつでも手動で呼び出すことができます。

private void InitializeTimer()
{
    counter = 0;
    t.Interval = 750;
    t.Enabled = true;
    timer1_Tick(null, null);

    t.Tick += new EventHandler(timer1_Tick);
}
于 2012-08-22T13:00:29.687 に答える
8

を使用できますSystem.Threading.Timer

これには、初期待機期間を取るコンストラクターがあります。これをゼロに設定すると、タイマーはすぐにコールバックをトリガーし、その後は指定した間隔ごとにコールバックをトリガーします。

Timer stateTimer = new Timer(tcb, autoEvent, 0, 750);
于 2012-08-22T13:04:09.943 に答える
3

メソッドを作成し、タイマー内から、またタイマーを開始する直前にこれを呼び出すだけです。

private int counter; 
Timer t = new Timer(); 

private void InitializeTimer() 
{ 
    counter = 0; 
    t.Interval = 750; 

    DoMything();
    t.Tick += new EventHandler(timer1_Tick); 
    t.Enabled = true; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (counter >= 3) 
    { 
        t.Enabled = false;                 
    } 
    else 
    { 
        //do something here 
        counter++; 
        DoMything();
    } 
} 


private void DoMything()
{
   //Do you stuff here
}
于 2012-08-22T13:01:20.397 に答える
1

最も簡単な方法は、最初にを非常に小さいものに設定してから、ハンドラーまたは別のハンドラーでIntervalそれを増やすことです。Tick

これにより、最初の「ティック」が、初期化メソッドのコンテキストではなく、後続のティックと同じ方法で、たとえば独自のスレッドで発生するようになります。

于 2012-08-22T13:00:48.173 に答える