定时器间隔小于Tick事件中的功能

时间:2012-07-31 09:29:34

标签: c# .net multithreading

我有timer 10秒interval并且在timer_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后进行测试时显示。 我没有点击OK 并等待另一个勾选。另一个MessageBox显示在秒钟上,依此类推......

MSDN Documentation中的

我读到它是同步的...任何想法?

2 个答案:

答案 0 :(得分:3)

我通过在tick事件开始时添加计时器禁用并在tick事件结束时启用来解决它。像这样

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;
        }

答案 1 :(得分:1)

我在System.Windows.Timers文档中看不到任何与您提及的同步相关联的文档。如果您希望每个Tick事件等到上一个Tick事件结束。在处理程序启动时停止计时器,并在完成工作后重新启动。这就是MSDN文档所显示的内容。