0

我有一个应用程序,我将在其中显示一个计时器。

用户将执行一个事件并应在一定时间内完成它。我目前有一个计时器,可以显示他们的时间滴答作响,但我现在想要的是总累积时间。因此,每次新事件开始时,完成事件的时间都会添加到它们的累积时间中。然后,当他们执行事件时,时间会在累积的时间上打勾。

这就是我所拥有的“当前计时器”

u.StartingTime = u.ChangeOverStandard;
u.CurrentChangeOverTime = u.StartingTime - (DateTime.Now - u.ChangeOverStart);

所有这些字段都是时间跨度。这非常适合他们的“当前”计时器

但是我需要一个“总”计时器,它要么显示一个正的时间跨度值……如果他们在他们应该完成之前完成……或者如果他们花费的时间太长,则显示一个负的时间跨度值。

编辑:

所以我想实现这个:

例如:对于“事件 1”,用户有 30 秒。结束。然后用户有一个“TotalTimespan”属性= 30。这个总数随着事件计时器而减少。假设他在 24 秒内完成。这意味着他在 TotalTimespan 中还剩 6 秒。然后“event2”必须在 40 秒内完成。所以在 event2 开始时,TotalTimespan = TotalTimespan(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;
4

1 回答 1

0

您只需要一个 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 秒。

于 2021-03-23T17:37:15.380 回答