2

操作を開始するボタンクリックイベントがあります:

private void Diagnose_Click(object sender, EventArgs e)
        {
            processfinish = false;
            timer2.Enabled = true;
            timerCount = 0;
            count = 0;
            countBack = 5;
            CreateZip.Enabled = false;
            DriverVerifier.Enabled = false;
            Diagnose.Enabled = false;
            Diagnose.Text = "PROCESSING PLEASE WAIT";
            if (this.backgroundWorker1.IsBusy == false)
            {
                this.backgroundWorker1.RunWorkerAsync();
            }
            Logger.Write("***** OPERATION STARTED *****");
        }

そして、backgroundworker の完了イベント:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {  
                processfinish = true;
                Logger.Write("***** OPERATION ENDED *****");
        }

そして、完了したイベントに到達したときに動作を開始する timer1 tick イベント:

private void timer1_Tick(object sender, EventArgs e)
        {
            count++;
            Diagnose.Text = "PROCESS HAS FINISHED" + "  " + countBack--;
            if (count == 6)
            {
                Diagnose.Text = "COLLECT INFORMATION";
                Diagnose.Enabled = true;
                CreateZip.Enabled = true;
                ViewLogFile.Enabled = true;
                DriverVerifier.Enabled = true;
                timer1.Enabled = false;
            }
        }

Logger テキスト ファイルに次のようなものを表示したい:

Logger.Write("Operation Time Was: " + timepassed);

timepassed には、たとえば分と秒が表示されます。

操作時間: 05:21

4

4 に答える 4

6

を使用するだけStopWatchです。Start()タイミングを開始し、Stop()完了したら、Elapsed時間を取得してフォーマットします。

于 2013-08-01T17:01:29.890 に答える
2

最も簡単な方法 (スレッドセーフではないため、最適とは言えません。同時に 2 つの操作を実行すると機能しません)

プライベート変数を宣言します。

DateTime _start;

次に、Diagnose_Clickメソッドで値を割り当てます。

_start = DateTime.Now;

そして、あなたbackgroundWorker1_RunWorkerCompletedはそのように経過した時間を過ごすことができます:

TimeSpan elapsed = DateTime.Now - _start;

そして、次のようなものを使用してログファイルに直接書き込むことができます:

Logger.Write("Operation time was: " + elapsed.Minutes + "mn " + elapsed.Seconds + "s");
于 2013-08-01T17:02:34.690 に答える
1

できるよ

DateTime startTime = DateTime.Now;

次に、処理が完了したら、

DateTime endTime = DateTime.Now;

//This will give you something like 2hrs 15min or 15 days 11 hours 10 min ect
TimeSpan timePassed = endTime.Subtract(startTime);

ここに MSDN ドキュメントhttp://msdn.microsoft.com/en-us/library/8ysw4sby.aspxがあります

このメソッドを使用する利点 (上で指定したように DateTime を具体的に使用する以外) は、タイマーが実行されていないことです。ここでは実際にリソースを使用していません。プロセスの開始時と終了時に DateTime を取得するだけです。次に、それらを差し引いて差を求めます。簡単に。

于 2013-08-01T17:01:59.360 に答える
1
    // Create new stopwatch
    Stopwatch stopwatch = new Stopwatch();
    // Begin timing
    stopwatch.Start();
    // Do something
    for (int i = 0; i < 1000; i++)
    {
        Thread.Sleep(1);
    }
    // Stop timing
    stopwatch.Stop();
    // Write result
    Console.WriteLine("Time elapsed: {0}",
        stopwatch.Elapsed);
于 2013-08-01T17:03:02.130 に答える