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 滴答事件:

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 回答