2016-09-27 84 views
-1

我目前正在考慮計算機科學A-Level,因此應該很明顯如何做到這一點,因爲我已經使用VB.Net一年了。但是,我開發了一個控制檯應用程序,它使用threading.thread.sleep()函數來跟蹤時間。這是迄今爲止我發現的最好的方式,但是經過一些破壞性測試後,我發現當用戶快速拖動控制檯時,會降低程序運行速度,導致計時錯誤。那麼,有沒有辦法阻止用戶移動控制檯窗口,基本上保持控制檯的位置在vb.Net中?我目前使用Visual Studio 2015年如何停止用戶在vb.net中移動控制檯窗口

非常感謝, 丹

+0

計時器可能會更好地工作。有幾種可供選擇:[比較.NET Framework類庫中的計時器類](https://web.archive.org/web/20150329101415/https://msdn.microsoft.com/en-us/雜誌/ cc164015.aspx) - 明智地選擇。 –

回答

1

雖然有可能停止窗口被拖動,這是錯誤的做法。睡一個線程並不是維護定時數據的準確方法。

移動窗口不是Windows系統上的唯一操作,它會降低應用程序的運行速度,並且開始干擾標準Windows體驗。

我假設你有代碼增加每次睡眠後的延遲量。

改爲:爲了保持準確性,您應該在應用程序開始計時時存儲DateTime.Now的值。

dim mStartTime = DateTime.Now 

然後獲得相對於此的時間差異。

dim elapsedMilliseconds = (DateTime.Now - mStartTime).TotalMilliseconds 

由於系統優先級/負載的原因,所有定時器/睡眠輪詢都會受到定時錯誤的影響。這種方法將防止這些錯誤積累。


修改控制檯是不是從.NET(你需要使用Windows API)容易,但是這是很簡單的防止用戶如果您正在使用的WinForms這樣做。也許你可以改變你的應用程序類型。

+1

如果計算機在日光和標準時間之間切換時運行,則'DateTime.UtcNow'將防止出現奇怪的錯誤。但是,系統時鐘可能隨時因其他原因而改變,例如,糾正它。 [Stopwatch](https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v = vs.110).aspx)會更安全。 –

+1

@AndrewMorton - 同意,StopWatch會更安全。有趣的是,雖然夏令時的變化不會影響當前狀態下的代碼,因爲所有的時區信息都被緩存了(我假設出於這個原因)。 – FloatingKiwi

相關問題