2

私のプログラムには、winform を起動し、関数を実行する前にx秒待機するパラメーターがあります。現在、スレッド スリープをx秒間使用してから関数を実行しています。ストリップ ステータス ラベルにタイマーを追加するにはどうすればよいですか?

それが言うように:x Seconds Remaining...

4

2 に答える 2

12

スレッドの実行をブロックする代わりに、必要なタイムアウトが経過したときにメソッドを呼び出すだけです。フォームにnewTimerを配置し、その Interval を に設定します1000。次に、タイマーのTickイベントをサブスクライブし、イベント ハンドラーで経過時間を計算します。

private int secondsToWait = 42;
private DateTime startTime;

private void button_Click(object sender, EventArgs e)
{
    timer.Start(); // start timer (you can do it on form load, if you need)
    startTime = DateTime.Now; // and remember start time
}

private void timer_Tick(object sender, EventArgs e)
{
    int elapsedSeconds = (int)(DateTime.Now - startTime).TotalSeconds;
    int remainingSeconds = secondsToWait - elapsedSeconds;

    if (remainingSeconds <= 0)
    {
        // run your function
        timer.Stop();
    }

    toolStripStatusLabel.Text = 
        String.Format("{0} seconds remaining...", remainingSeconds);
}
于 2013-08-01T22:31:24.707 に答える
1

次を使用できますTimer

public class Form1 : Form {
    public Form1(){
        InitializeComponent();
        t = new Timer {Interval = 1000};
        t.Tick += Tick;
        //try counting down the time
        CountDown(100);
    }
    DateTime start;
    Timer t;  
    long s;
    public void CountDown(long seconds){
       start = DateTime.Now;
       s = seconds;
       t.Start();
    }
    private void Tick(object sender, EventArgs e){
       long remainingSeconds = s - (DateTime.Now - start).TotalSeconds;
       if(remainingSeconds <= 0) {
         t.Stop(); 
         toolStripStatusLabel1.Text = "Done!";
         return;
       }
       toolStripStatusLabel1.Text = string.Format("{0} seconds remaining...", remainingSeconds);
    }
}
于 2013-08-01T22:33:54.537 に答える