7

私のプログラムは cmd.exe でバッチ ファイルを実行します。終了後、ユーザーに MessageBox を表示してFinished in #.## seconds

を使用してCMD出力をテキストボックスにリダイレクトしてprocess.BeginOutputReadLine()います。これは私が試したコードです:

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

プロセスが完了するまでに約 7 ~ 15 秒かかりましたが、MessageBox が表示されFinished in 0 secondsました。

完了するのにかかった正確な時間を秒単位で取得するにはどうすればよいですか?

4

6 に答える 6

23
Stopwatch watch = new Stopwatch();
watch.Start();
//Do things
watch.Stop();
Text = watch.Elapsed.TotalSeconds.ToString();
于 2013-05-16T19:44:10.153 に答える
2

試しましたprocess.ExitTime.Subtract(process.StartTime).TotalSecondsか?

追加するために編集:プロセスが終了する前にこれを使用しようとすると、例外が発生することに注意してください。のドキュメントに従って、これが当てはまるかどうか疑問がある場合は、プロパティをExitTime使用してください。HasExited

于 2013-05-16T19:43:23.527 に答える
2

読みやすくするために、最終的にこのようなことをしてもらえますか

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

アクセスするには、2 つの `var ローカル変数を変更して、ローカル スコープの外からアクセスできるようにする必要があります。

以下は、クラスの上部にあるローカル メソッドの外で宣言する方法です。

   public static TimeSpan procTime = new TimeSpan();
   var procTimeInSec, can still be declared in the local scope
于 2013-05-16T20:08:33.237 に答える
1

基本的なストップウォッチだけで十分です。

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 秒になる可能性があります。

于 2013-05-16T19:42:28.297 に答える
0

プロセスを開始するときは、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();
   }
}
于 2013-05-16T19:43:53.527 に答える
0

Stopwatchクラスを調べる必要があります。プロセスを開始する前にストップウォッチを開始し、その後停止して経過時間を取得する必要があります。

于 2013-05-16T19:41:39.800 に答える