web-dev-qa-db-ja.com

プログラムでタイマー刻みをトリガーする方法は?

10秒(10kミリ秒)の間隔で構成されたWindowsフォームタイマーがあるとしましょう。

myTimer.Interval = 10000;

それを開始して、すぐにTickイベントを開始したいと思います。

myTimer.Start();
myTimer_Tick(null, null);

最後の行は機能しますが、より良いまたはより適切な方法はありますか?

16
JYelton

私が別の方法で行う唯一のことは、実際のTick機能を別のメソッドに移動することです。これにより、イベントを直接呼び出す必要がなくなります。

myTimer.Start();
ProcessTick();

private void MyTimer_Tick(...)
{
    ProcessTick();
}

private void ProcessTick()
{
    ...
}

イベントの直接呼び出しは Code Smell のように思われるので、主にこれを行います。

32
Bevan

.NETには少なくとも4つの異なる「タイマー」があります。 System.Threadingを使用すると、特に初期遅延を設定できるものを取得できます。

var Timer = new Timer(Timer_Elapsed, null, 0, 10000);

さまざまなタイマーを使用することには利点があり、 ここ はそれらすべてについて説明する良い記事です。

9
Stretto

間隔を1に設定し(0はおそらく無限のタイムアウトを意味します)、初めてティックするときに10kに設定できます。

タイマーは「すぐに」チェックします(使用しているタイマーのタイプによって異なります。 this を参照)が、ソリューションのようにクリックハンドラーで実行は続行されません。

(私はあなたがベヴァンからの解決策について知っていたと思います)。

2
Martin Konicek