C#计时器滴答事件工作原理

本文关键字:工作 事件 计时器 滴答 | 更新日期: 2023-09-27 18:19:37

我有一个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();
        }
}

C#计时器滴答事件工作原理

听起来你的Hesapla方法可以直接或间接地回调到hizrariHesapla的方法中。当Invalidate调用在循环之外时,您将只看到它在每个计时器滴答声中重新绘制一次,但当它在循环内部时,您会看到每次调用hizrariHesapla时的重新绘制。在那里放置一个断点,然后查看调用堆栈。

相关文章: