本帖最后由 wincao 于 2024-3-15 09:49 编辑
改进计算方法:
[Asm] 纯文本查看 复制代码 public static event DG反馈<int> E进度;
/// <summary>
/// 重复执行进程
/// </summary>
/// <param name="Max">最大值</param>
/// <param name="Y">执行频率</param>
public static void Do(Action work, double Max, double Y = 0.01)
{
for (int i = 0; i < Max; i++)
{
if (i == Max - 1) { E进度(100); }//补充100%的输出
else if ((int)(i % (Max * Y)) == 0)//百分之一时反馈
E进度((int)(Math.Floor(i / (Max * 0.01))));
//工作代码
work();
}
E进度?.Invoke(0);//结束
}
循环在工作代码时:
[Asm] 纯文本查看 复制代码 /// <summary>
/// 进度计算
/// </summary>
/// <param name="current">当前进度</param>
/// <param name="Max">最大进度</param>
/// <param name="Y">执行频率</param>
public static void Do(int current, double Max = 100, double Y = 0.01)
{
//补充100%的输出
if (current == Max) { E进度?.Invoke(100); }
//百分之一时反馈
else if ((int)(current % (Max * Y)) == 0)
E进度?.Invoke((int)(Math.Floor(current / (Max * 0.01))));
}
工作代码:
[Asm] 纯文本查看 复制代码 public void work()
{
//工作内部进度的调用方法
int current = 0;
double Max = 100;
for (int i = 0; i < Max; i++){
Thread.Sleep(100);//工作代码
ClassProgressBar.Do(++current, Max);}
} |