2011-04-19 60 views
0

我需要顯示進程正在進行的時間,在這種情況下,我是以00:00:00的格式顯示的,所以問題是當進程結束時,我該如何停止定時器。顯示控制檯中的計時器

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); 
bool flag = true; 
    Stopwatch stopwatch = new Stopwatch(); 
      stopwatch.Start(); 
      bool flag = true; 

      while (flag == true) 
      { 
       TimeSpan timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); 
       Console.Write(timeSpan.ToString("c")); 
       Console.Write('\r'); 
       //HERE IS MY PROCESS 

       //flag = false; 

      } 
+0

請注意,您正在運行「這是我的進程」在while循環。我猜你只想運行一次。因此,stopwatch.Start()... PROCESS .. stopwatch.Stop()應該足以獲得流程的流逝持續時間。 while循環確實表明你想讓PROCESS成爲一個線程,如果是這種情況,那麼你應該這樣說。 – Blazes 2011-04-20 08:23:36

回答

1

while循環後,加入

stopwatch.Stop(); 
0

您可能將不得不從不同的線程中調用stopwatch.Stop()。秒錶將需要從兩者都可訪問,並且您可能需要在它們之間提供鎖定。

+0

一些代碼建議? – ale 2011-04-19 22:24:35

0

您不必關閉它。讓GC回收內存。
嘗試任何形式的停止或關機都會產生比放棄更多的工作。

在後臺沒有進行任何處理,所有工作都是在您使用Stopwatch方法和屬性時完成的。這是因爲Stopwatch沒有自己的計數器,它通過兩次讀取OS系統範圍的時鐘並減去它來工作。

1

試試這個:

 { 
      Stopwatch stopWatch = new Stopwatch(); 
      stopWatch.Start(); 
      bool flag = true; 

      while (flag == true) 
      { 
       stopWatch.Stop(); 
       Console.Write(stopWatch.ElapsedMilliseconds + "ms"); 
       Console.Write('\r'); 
       stopWatch.Start(); 
       //HERE IS MY PROCESS 

       //flag = false; 

      } 

      stopWatch.Stop(); 
     } 

您也可以格式化的時候,請你,你已經有了毫秒現在=)