繁体   English   中英

获取时间过程需要几秒钟才能完成?

[英]Get time process takes to complete in seconds?

我的程序在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显示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属性。

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

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秒,因为它实际上并没有太多作用。

如果它使您更容易阅读,您最终可以做这样的事情吗

var procTime = DateTime.Now - Process.GetCurrentProcess().StartTime;
var procTimeInSec = procTime.Seconds;
MessageBox.Show(string.Format("Finished in {0} seconds", procTimeInSec));

要进行访问,您可能需要更改两个`var局部变量,以便可以从局部范围之外进行访问。

下面是如何在类顶部的本地方法之外声明它

   public static TimeSpan procTime = new TimeSpan();
   var procTimeInSec, can still be declared in the local scope

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

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

在流程上,为Exited事件添加事件处理程序,并在流程完成后停止秒表并获取时间。

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();
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM