[英]C# Countdown Accumulation Timer
我有一個應用程序,我將在其中顯示一個計時器。
用戶將執行一個事件,並且應該在一定時間內完成它。 我目前有一個計時器,顯示他們的時間在流逝,但我現在想要的是總累計時間。 因此,每次開始新的事件時,完成事件的時間都會添加到他們的累計時間中。 然后,當他們執行該事件時,時間在累積時間上滴答作響。
這就是我對“當前計時器”的看法
u.StartingTime = u.ChangeOverStandard;
u.CurrentChangeOverTime = u.StartingTime - (DateTime.Now - u.ChangeOverStart);
所有這些字段都是時間跨度。 這非常適合他們的“當前”計時器
但是我需要一個“總”計時器,它要么顯示一個正的時間跨度值……如果他們在他們應該做的之前完成……或者一個負的時間跨度值,如果他們花費的時間太長。
編輯:
所以我想實現這個:
例如:對於“事件 1”,用戶有 30 秒。 結束。 然后用戶有一個“TotalTimespan”屬性 = 30。這個總數隨着事件計時器而減少。 假設他在 24 秒內完成。 這意味着他在 TotalTimespan 中還剩 6 秒。 然后“event2”必須在 40 秒內完成。 所以在事件 2 開始時,TotalTimespan = TotalTimespane(6) + 40. = 46。如果用戶使用 60 秒,則 TotalTimespan = 46 -60 = -14。
“計時器”不是計時器,不能用作計時器。 它在后台工作人員上運行,該工作人員還進行其他幾項計算。 所以我不能一次一秒地取消時間。
在每個新事件中,我都嘗試過
u.AccumulatedTime += u.ChangeOverStandard;
接着
u.AccumulatedTime -= u.StartingTime - (DateTime.Now - u.ChangeOverStart);
但顯然這是行不通的,因為它通過我的循環從每一輪的累積時間中獲取總經過時間
DateTime.Now - u.ChangeOverStart
^^會給我從活動開始到現在經過的時間,這就是我想要的嗎?
u.AccumulatedTime -= DateTime.Now - u.ChangeOverStart;
您只需要一個 TimeSpan 和兩個 DateTime 靜態(全局)變量來跟蹤時間並進行計算。 這是使用您描述的數字的示例:
TimeSpan left = new TimeSpan(0, 0, 30); //30 seconds allowed for task.
DateTime start = DateTime.UtcNow;
//User perform action.
System.Threading.Thread.Sleep(24000); //24 sec wait.
DateTime stop = DateTime.UtcNow;
left = left - (stop - start);
Console.WriteLine(Math.Ceiling((double)left.TotalSeconds));
//Output was: 6
left = left + new TimeSpan(0, 0, 40); //40 seconds allowed for task.
start = DateTime.UtcNow;
//User perform action.
System.Threading.Thread.Sleep(60000); //60 sec wait.
stop = DateTime.UtcNow;
left = left - (stop - start);
Console.WriteLine(Math.Ceiling((double)left.TotalSeconds));
//Output was: -14
left = left + new TimeSpan(0, 0, 30); //30 seconds allowed for task.
Console.WriteLine(Math.Ceiling((double)left.TotalSeconds));
//Output was: 16
如您所見,最后的剩余時間如您所料,為 16 秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.