gpt4 book ai didi

c# - 使增量同时完成

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:55 27 4
gpt4 key购买 nike

我有一个由 5 个数字降序排列的数组:{ 289, 151, 69, 27, 6 } :

int[] sortedArray = new int[] { 289, 151, 69, 27, 6 };

表单上有 5 个进度条。每个进度条的最大值 = sortedArray[x]

例如:

progressBar0.MaxValue = 289; //First element of array

progressBar1.MaxValue = 151; //2nd

progressBar3.MaxValue = 69; // etc...

我想要实现的是让所有进度条递增直到它们各自的最大值,但让它们同时完成

我首先为数组的每个元素创建一个新线程。但是我找不到让它们一起完成的算法..

        int count = 0;
foreach (var item in sortedArray)
{
new Thread(async () =>
{
ProgressBar p = Controls.Find("progressbar" + count.ToString(), true)[0] as ProgressBar;
//how to find the number to increment so they all finish at the same time ? p.Increment(i);
}).Start();
cout +=1;
}

我想用 TimeSpan 实现一些东西。例如:

所有进度条都需要在 5 秒内达到最大值。

我该怎么做?

最佳答案

当你试图在一段时间内增加它们时,你需要做的是计算出一个介于 0 和 1 之间的因子,表明你离完成有多近(基于自你开始以来已经过去了多少时间)

在某处记录开始时间。 var startTime = DateTime.UtcNow;

然后在您的更新代码中执行此操作

var elapsedTime = DateTime.UtcNow - startTime; //How long as elapsed
int progress = elapsedTime.TotalSeconds / 5.0; //Small number / a large number is always 0..1
if (progress > 1)
progress = 1;

然后进度条根据 0..MaxValue 而不是 0..1 的比例显示它们的进度,因此您只需将当前进度因子乘以 progressBar.MaxValue

someProgressBar.Value = (int)Math.Ceiling(someProgressBar.MaxValue * progress);

这与计算百分比(每一百)完全相同,您只需将 0..1 系数乘以 100。顺便说一下,这就是计算百分比的方式 (smallNumber/bigNumber) * 100。

PS:如果您按照我的建议使用绝对时间,那么您的进度条将始终在正确的时间结束。在循环中(例如在计时器中)添加小增量的问题在于,如果应用程序繁忙/滞后,那么您的计时器将完成得太晚。

关于c# - 使增量同时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com