我將部分固件移植到用c#編寫的gui中。我發現c#中的固件_nop()#
nop()
是一個函數,它實際上什麼都不做,並延遲執行一些時鐘週期。如果我使用nop()它會延遲固件的執行時間2毫秒。我如何延遲c#中的東西?
由於提前,
我將部分固件移植到用c#編寫的gui中。我發現c#中的固件_nop()#
nop()
是一個函數,它實際上什麼都不做,並延遲執行一些時鐘週期。如果我使用nop()它會延遲固件的執行時間2毫秒。我如何延遲c#中的東西?
由於提前,
System.Threading.Thread.Sleep(milliseconds);
注意,阻止您的GUI的主線程超過幾毫秒的時間通常是一個壞主意。最好使用一個在幾毫秒後喚醒的計時器,以便在此期間進行事件處理。另外,如果您想在做一些I/O之前暫停,請考慮使用異步I/O。
另請注意,Windows或.NET都不提供任何實時保證。對Thread.Sleep(2)
的調用將暫停至少2毫秒,但該線程可能無法在超出該時間的許多毫秒內恢復執行。
謝謝我結束了使用睡眠功能。 – Vikyboss
例如:Thread.Sleep(2);
要知道,窗戶有大約15ms的最小分辨率不過,所以你可能無法得到exatly 2ms的。欲瞭解更多信息,請參閱What is the impact of Thread.Sleep(1) in C#?
Thread.Sleep(1000);
會睡在當前執行1秒鐘。
要去反對糧食,並說,如果你需要嚴格的時間,Thread.Sleep isn't a good idea。
我推薦使用手動/自動ResetEvents,而不是System.Timers
計時器。
當需要更高精度時我需要使用定時器.. – Vikyboss
.NET GUI應用程序與固件不同。如果在固件中存在nop()的原因,那麼在.NET GUI應用程序中不一定有它的原因。檢查是否需要nop()調用,如果不是,則跳過它們。 – dtb
謝謝大家。結束使用System.Threading.Thread.Sleep(毫秒);因爲還有其他與需要加載的gui相關的延遲。使用相當大的延遲(毫秒與微秒相比)將適合gui開發的需要。 – Vikyboss
如果你正在做GUI編程,你可能不應該做任何形式的延遲。而應使用異步編程模式來啓動工作,並通知其狀態,而不是睡眠/阻塞。 – Alan