0

次のコードで(timer2の間隔は1000です)

private void timer1_Tick(object sender, EventArgs e) {
    timer7.Enabled=false;
    timer8.Enabled=false;
    lblTimer_Value_InBuildings.Text="0";
}

private void timer2_Tick(object sender, EventArgs e) {
    lblTimer_Value_InBuildings.Text=(int.Parse(lblTimer_Value_InBuildings.Text)+1).ToString();
}

forループで遅延を作成することはできません

for(int i=1; i<=Max_Step; i++) { 
    // my code... 

    // I want delay here: 
    timer1.Interval=60000; 
    timer1.Enabled=true; 
    timer2.Enabled=true; 

    // Thread.Sleep(60000); // makes no change even if uncommenting
}

その行のコメントを外してもしなくても、でThread.Sleep(60000);何も変わっていないことがわかります。lblTimer_Value_InBuildingstimer2_Tick

解決策(タイマーありまたはなし)を教えていただけますか?

4

3 に答える 3

5

タイマーはループです。forループは必要ありません。関数呼び出しの外でループ変数を追跡するだけです。GUIコードから分離するために、このすべての機能をクラスにラップすることをお勧めします。

private int loopVar = 0;
public void Form_Load()
{
    // Start 100ms after form load.
    timer1.Interval = 100;
    timer1.Enabled = true;
}


private void timer1_Tick(object sender, EventArgs e)
{
   timer1.Enabled = false;
   //  My Code Here
   loopVar++;

   if (loopVar < Max_Step)
   {
      // Come back to the _tick after 60 seconds.
      timer1.Interval = 60000;
      timer1.Enabled = true;

   }
}
于 2013-02-02T00:16:02.650 に答える
2

Thread.Sleep(60000)を実行すると、UIスレッドに60秒間スリープするように指示します。これは、タイマーのスリープなどのイベントを処理する代わりにUIスレッドがスリープ状態でハングアップするため、タイマーの実行を防ぐこともできます。

于 2013-02-01T23:54:35.397 に答える
1

コードは完全に私を退屈に感じさせました

メソッド:

private void timer1_Tick(object sender, EventArgs e) {
    timer2.Enabled=false;
    timer1.Enabled=false;
    lblTimer_Value_InBuildings.Text="0";
}

private void timer2_Tick(object sender, EventArgs e) {
    lblTimer_Value_InBuildings.Text=(int.Parse(lblTimer_Value_InBuildings.Text)+1).ToString();
}

private void timer3_Tick(object sender, EventArgs e) {
    if(0!=(int)timer3.Tag) {
        // your code goes here and peformed per step
        timer1.Enabled=true;
        timer2.Enabled=true;
    }

    timer3.Tag=(1+(int)timer3.Tag)%Max_Step;
}

イニシャル:

var delayedInterval=60000;

timer1.Interval=60000;
timer2.Interval=1000;
timer3.Interval=delayedInterval+timer1.Interval;

lblTimer_Value_InBuildings.Text="0";
timer3.Tag=1;
timer3.Enabled=true;

元のコードが作成timer1されて停止することはないので、修正する必要があるとtimer2思います。そうしないと、ここでは意味がありません。timer7timer8timer1timer2

于 2013-02-02T05:37:51.013 に答える