2010-08-05 80 views
3

我試圖用C#/ .NET暫停時間。我可以設定時間,但我想設定暫停時間。Windows中的暫停時間

有誰知道如何做到這一點?

命令提示符的建議也是有幫助的。

我正在使用Visual Studio 2010,如果重要。

+2

你的意思是暫停'定時器'?我認爲只有超人可以暫停時間 - 或者他只是讓時間倒退? :) – 2010-08-05 12:07:19

+2

@DHoerster - 查克諾里斯呢? :) – Giorgi 2010-08-05 12:12:44

+0

你爲什麼要這麼做? – 2010-08-05 12:14:01

回答

3

用於測試?還是現實生活?

對於測試,您可以mock DateTime.Now(雖然它更容易有一個IClock接口)。對於實際用法 - 我只是不會

還是你的意思是Thread.Sleep

+0

@ Marc - 這是我需要凍結的系統時間,我需要檢查本週沒有輸入的報告,而不是下週,我在下週前的23:59:59檢查它。這是檢查系統不認爲它是下一週。此過程需要1秒以上的時間來檢查自動化測試中的報告。 – chrissygormley 2010-08-05 12:23:59

+0

您不需要凍結系統時間來執行此操作。這也不會是可靠的,因爲如果凍結系統時間需要一秒多的時間呢?要麼提前運行該過程,要麼改善您的時間處理代碼。如果代碼運行的時間不足一個小時,那麼你應該看看前一週。只需將其添加到您的代碼中。 – 2010-08-05 12:32:13

+0

@chrissygormley,正如其他人所指出的那樣,最好的辦法是按時分離所有的依賴關係,這樣你就可以模擬測試的時序行爲。這並不容易,特別是如果你有一個遺留的代碼庫。我個人喜歡有一個ITimerService提供各種與時間有關的函數(報告DateTime.Now,時間回調,測量經過時間等),我可以注入需要時間意識的類中。 – 2010-08-05 13:43:01

0

我想你是在談論停止窗口的時間,我想這是一個不是Windows的功能來做到這一點。 實際上你試圖達到什麼目標(除了休息窗口)可能有其他解決方案。

+0

@ MikeG - 我在特定的時間編寫測試,它需要與測試運行時保持一致。這是邊界測試,我會假設,因爲你可以改變時間到過去,應該沒有問題,暫停Windows計時器。 – chrissygormley 2010-08-05 12:16:14

+2

將時鐘模擬爲一個可替換的假類,它可以在整個測試中返回相同的值。 – 2010-08-05 12:17:36

0

嗯,我不確定你爲什麼要這麼做,但是,由於在Windows中沒有'PauseTime'函數,所以你不需要一個標記當前的服務時間,然後連續將系統時間設置爲該開始時間。這應該達到保持系統時間一致的效果。

+0

@ Kazar - 這就是我在那一刻所做的,但我希望有一種方法來凍結它。無論如何感謝 – chrissygormley 2010-08-05 12:17:29

0

如果您需要查找某些調試工作的經過時間,請參見System.Diagnotics.Stopwatch類。 page on MSDN有關於如何使用它的一些體面的例子。我不知道你正在尋找什麼類型的精度,所以如果你正在尋找高性能的時序診斷,那麼這可能不是你要使用的類。

希望這會有所幫助!