Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何使用DateTime计算经过了多少时间?_C#_Winforms - Fatal编程技术网

C# 我如何使用DateTime计算经过了多少时间?

C# 我如何使用DateTime计算经过了多少时间?,c#,winforms,C#,Winforms,我有一个启动操作的按钮单击事件: private void Diagnose_Click(object sender, EventArgs e) { processfinish = false; timer2.Enabled = true; timerCount = 0; count = 0; countBack = 5; CreateZ

我有一个启动操作的按钮单击事件:

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 *****");
        }
以及后台工作人员的已完成事件:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {  
                processfinish = true;
                Logger.Write("***** OPERATION ENDED *****");
        }
以及到达完成事件时开始工作的计时器1滴答事件:

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.Write("Operation Time Was: " + timepassed);
Logger.Write("Operation time was: " + elapsed.Minutes + "mn " + elapsed.Seconds + "s");
timepassed将显示分钟和秒,例如:

手术时间为:05:21

只需使用一个。它需要开始计时,当你完成的时候,它就开始计时,然后得到时间和时间。

你可以这样做

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文档

使用此方法的优点(除了像上面指定的那样专门使用DateTime之外)是没有运行计时器。您在这里没有真正使用任何资源。您只需在流程开始和结束时获取日期时间。然后减去它们得到差值。非常简单。

最简单的方法(不是最好的方法,因为它根本不是线程安全的,所以如果您有两个操作同时工作,它将不起作用)

声明一个私有变量:

DateTime _start;
然后在
Diagnose\中单击
方法,为其指定一个值:

_start = DateTime.Now;
在您的
backgroundWorker1\u RunWorkerCompleted
中,您可以得到这样经过的时间:

TimeSpan elapsed = DateTime.Now - _start;
您可以使用以下方式将其直接写入日志文件:

Logger.Write("Operation Time Was: " + timepassed);
Logger.Write("Operation time was: " + elapsed.Minutes + "mn " + elapsed.Seconds + "s");
//创建新的秒表
秒表秒表=新秒表();
//开始计时
秒表。开始();
//做点什么
对于(int i=0;i<1000;i++)
{
睡眠(1);
}
//停止计时
秒表;
//写入结果
WriteLine(“经过的时间:{0}”),
秒表(已过);

您可以使用秒表对象,只需在开始时实例化并开始,然后停止它并在结束时获取时间。