1

我有一个timer10 秒的时间intervaltimer_Tick我做一些通常需要大约一秒钟的事情,但有时需要超过 90 秒。它将如何行动?此事件是否同步以等待eventhandler完成执行?我测试了,但我仍然需要一个答案...

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

    }
    MessageBox.Show("Test");
}

当我在显示第一个刻度后对其进行测试时MessageBox我没有单击“确定”并等待另一个滴答声。另一个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 回答