C#计时器事件工作原理

时间:2012-01-05 20:24:16

标签: c# events timer

我有一个c#表单,它会绘制一些曲线。我试图以指定的间隔用随机值绘制这些曲线。我能够做我想做的事,但有一种情况我无法回答。在下面的情况中,尽管事实上我使用的是5秒间隔,但案例1的表单重新绘制得非常快。但是,在案例2中,如果我移动了“Invalidate();”到另一部分,然后代码按预期工作。 这种情况的原因是什么?

谢谢...

案例1:

private void hizlariHesapla()
{
        if (RastgeleDegerCheckBox.Checked == false)
        {
            // Some code blocks

        }
        else
        {
            // Some code blocks
            Invalidate();
        }
        Hesapla(); // Not important for the case
}
private void SurekliCizdir_Tick_1(object sender, EventArgs e)
{
        if (RastgeleDegerCheckBox.Checked == true)
        {

            hizlariHesapla();
        }

}

案例2:

private void hizlariHesapla()
{
        if (RastgeleDegerCheckBox.Checked == false)
        {
            // Some code blocks

        }
        else
        {
            // Some code blocks

        }
        Hesapla(); // Not important for the case
}
private void SurekliCizdir_Tick_1(object sender, EventArgs e)
{
        if (RastgeleDegerCheckBox.Checked == true)
        {

            hizlariHesapla();
            Invalidate();
        }

}

1 个答案:

答案 0 :(得分:1)

听起来好像你的Hesapla方法可以直接或间接回调到hizlariHesapla方法。通过循环外的Invalidate调用,您将只看到每个计时器滴答一次重绘,但是当它在里面时,您会看到每次调用hizlariHesapla时的重绘。在那里放一个断点并查看调用堆栈。