我有一个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();
}
}
答案 0 :(得分:1)
听起来好像你的Hesapla方法可以直接或间接回调到hizlariHesapla方法。通过循环外的Invalidate调用,您将只看到每个计时器滴答一次重绘,但是当它在里面时,您会看到每次调用hizlariHesapla时的重绘。在那里放一个断点并查看调用堆栈。