4

タイマーに問題があります。関数内に関数があります(関数内に描画)

void func(){

 /*...do something ... */
for(){
   for() {
  /*loop*/

 draw(A,B, Pen);

 }

/*... do something ...*/
  }
}

これは描画機能です

   public void draw1(Point Poc, Point Kra, Pen o) {
      Graphics g = this.CreateGraphics();
      g.DrawLine(o,Poc.X+4, Poc.Y+4,Kra.X+4, Kra.Y+4);
      g.Dispose();
      }

ボタンのクリック時に関数 'func' を呼び出します

private void button4_Click(object sender, EventArgs e){

    func();

}

毎秒描画関数を呼び出したい(毎秒線を描画する)。描画の間、関数は作業を続けて = ループを計算し、しばらくの間 (間隔) 次の行を描画する必要があります。で試しました

timer1.Tick += new EventHandler(timer1_Tick);

等..

private void timer1_Tick(object sender, EventArgs e)
    {
        ...
        draw(A, B, Pen)
    }

等..

しかし、それはすべて私の機能を停止し、ランダムな線を1本描きます。関数 'func' で 2 つの描画の間の時間 (間隔) が必要です。タイマーがなくても問題なく動作しますが、すべての線をすぐに描画します。ゆっくり描画する必要があります。乾杯。

4

4 に答える 4

25

何をしようとしているのかは完全にはわかりませんが、一般に、Timer クラスのオブジェクトを使用して、指定された間隔で実行されるコードを指定できます。コードは次のようになります。

Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
myTimer.Interval = 1000; // 1000 ms is one second
myTimer.Start();

public static void DisplayTimeEvent(object source, ElapsedEventArgs e)
{
    // code here will run every second
}
于 2012-06-08T19:26:32.110 に答える
5

これを試して

var aTimer = new System.Timers.Timer(1000);

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

aTimer.Interval = 1000;
aTimer.Enabled = true;       

//if your code is not registers timer globally then uncomment following code

//GC.KeepAlive(aTimer);



private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    draw(A, B, Pen);
}
于 2012-06-08T19:30:18.317 に答える
2

WinForms アプリで描画するのではなく、更新または描画メッセージに応答します。フォームのイベントでやりたいことを行いPaintます (またはメソッドをオーバーライドしますOnPaint)。フォームを再描画する場合は、 を使用しますForm.InvalidateForm.Invalidateたとえば、タイマーの目盛りを呼び出します...

于 2012-06-08T19:28:51.360 に答える