2012-01-05 22 views
0

私はいくつかの曲線を描くC#フォームを持っています。私はランダムな値で指定された間隔でこれらの曲線を描画しようとしています。私は自分がしたいことをすることができましたが、答えられない状況があります。以下のケースでは、ケース1は、5秒間隔を使用しているにもかかわらず、非常に高速に再描画されるフォームを持っています。しかし、ケース2では、 "Invalidate();"他の部分には、コードは想定されているとおりに動作します。 その理由は何ですか? C#Timer Tickイベントワーキングプリンシパル

ケース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:あなたのHesapla方法は、直接的または間接的にバックhizlariHesaplaメソッドに呼び出すことができるかのように聞こえる

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

タイマーを初期化するコードを表示してください。 – Fischermaen

+0

Visual Studioによって生成されたInitializeComponent()メソッドで初期化されます。 –

+0

Whchの値を「間隔」に設定しましたか? – Fischermaen

答えて

1

。ループの外でInvalidateを呼び出すと、タイマーのティックごとに一度再描画されますが、内部にあるときはhizlariHesaplaが呼び出されるたびに再描画が表示されます。そこにブレークポイントを置き、呼び出しスタックを見てください。

+0

私はあなた自身が連続的に自分自身を呼んでいるあなたのポイントを見ます。 –

+0

コメントありがとうございました... –