1

私はtimer10 秒intervaltimer_Tickイベントを行いますが、通常は約 1 秒必要ですが、場合によっては 90 秒以上かかることもあります。それはどのように機能しますか?eventhandlerこのイベントは、 の実行が完了するまで待機するために同期していますか? テストしましたが、まだ答えが必要です...

private void checkTimer_Tick(object sender, EventArgs e)
{
    MessageBox.Show("Test");   
    for (int i = 0; i < 2000000000; i++)
    {

    }
    MessageBox.Show("Test");
}

最初の目盛りMessageBoxが表示された後にテストすると。[OK] をクリックして別のティックを待つことはしません。もう 1 つMessageBoxは秒の目盛りなどに表示されます...

MSDN ドキュメントでは、同期的であると読みました...任意のアイデアはありますか?

4

2 に答える 2

3

ティックイベントの開始時にタイマーを無効にし、ティックイベントの終了時に有効にすることで解決しました。このような

private void checkTimer_Tick(object sender, EventArgs e)
        {
            checkTimer.Enabled = false;
            MessageBox.Show("Test");   
            for (int i = 0; i < 2000000000; i++)
            {

            }
            MessageBox.Show("Test");
            checkTimer.Enabled = true;
        }
于 2012-07-31T09:49:59.540 に答える
1

System.Windows.Timersあなたがリンクしたドキュメンテーションには、同期されていることについて言及しているものは何もありません。各 Tick イベントを前の Tick イベントが終了するまで待機させたい場合。ハンドラーの開始時にタイマーを停止し、作業が完了したら再開します。これは、MSDN のドキュメントが示しているものです。

于 2012-07-31T09:50:30.137 に答える