簡體   English   中英

C#倒計時累加定時器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM