以秒为单位完成流程所需的时间

本文关键字:程所需 时间 为单位 | 更新日期: 2023-09-27 18:14:03

我的程序在cmd.exe中运行批处理文件,在它完成后,我想向用户显示一个消息框,说Finished in #.## seconds

我正在使用process.BeginOutputReadLine()将CMD输出重定向到文本框,这是我尝试的代码:

if (e.Data == null)
{  
    string time = process.TotalProcessorTime.Seconds.ToString();
    MessageBox.Show("Finished in " + time + " seconds");
}

耗时约7-15秒,但MessageBox显示Finished in 0 seconds .

我如何获得以秒为单位完成所需的准确时间?

以秒为单位完成流程所需的时间

Stopwatch watch = new Stopwatch();
watch.Start();
//Do things
watch.Stop();
Text = watch.Elapsed.TotalSeconds.ToString();

您试过process.ExitTime.Subtract(process.StartTime).TotalSeconds了吗?

编辑为添加:注意,如果您试图在进程退出之前使用此命令,将会得到一个异常。根据ExitTime的文档,如果您对这种情况是否存在任何疑问,请使用HasExited属性。

如果能让你更容易阅读,你最终会做这样的事情吗

var procTime = DateTime.Now - Process.GetCurrentProcess().StartTime;
var procTimeInSec = procTime.Seconds;
MessageBox.Show(string.Format("Finished in {0} seconds", procTimeInSec));
你可能想修改两个' var local变量,使其可以从本地作用域之外访问。 下面的

是在类

顶部的局部方法之外声明它的方式
   public static TimeSpan procTime = new TimeSpan();
   var procTimeInSec, can still be declared in the local scope

只要基本的秒表就足够了。

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// run external process, if asynchronous - 
//store stopWatch in member variable instead of local
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;

注意TotalProcessorTime测量CPU使用时间,对于CMD.exe来说很可能是0秒,因为它实际上没有做太多事情。

您应该查看Stopwatch类。您需要在进程开始之前启动秒表,然后停止秒表并获得经过的时间。

在启动过程时应该使用Stopwatch类。

在流程上,为exit事件添加一个事件处理程序,当流程完成时,停止秒表并检索时间。

class Foo
{
   Stopwatch watch = new Stopwatch();
   public void RunProcess(Process process)
   {
      process.Exited += new EventHandler(ProcessExit);
      process.Start();
      watch.Start();
   }
   public void ProcessExit(object sender, EventArgs e)
   {
      watch.Stop();
   }
}