吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 611|回复: 4
收起左侧

[学习记录] 【C#】以执行频率打印进度,即文字进度条

  [复制链接]
wincao 发表于 2024-3-1 09:43
难点在最后输出100%问题。
经过多次实践,终于找出解决:
[C#] 纯文本查看 复制代码
        /// <summary>
        /// 以执行频率打印进度
        /// </summary>
        /// <param name="Max">最大值</param>
        /// <param name="Y">执行频率</param>
        public static void Do(Action work, double Max, double Y = 0.01)
        {
            int current = 0;
            for (int i = 0; i < Max; i++)
            {
                //百分之一时反馈
                if ((int)(current++ % (Max * Y)) == 0)
                    Console.WriteLine($"已经完成{current}个,进度{Math.Floor(current / (Max * 0.01))}%。");
                //工作代码
                work();
            }
            //补充100%的输出
            if ((int)((current - 1) % (Max * Y)) != 0)
            {
                Console.WriteLine($"已经完成{current}个,进度{Math.Floor(current / (Max * 0.01))}%。");
            }
        }

        public static void work()
        {
            //工作代码
            Thread.Sleep(100);
        }


执行代码:
[C#] 纯文本查看 复制代码
            //以执行频率打印进度
            Class6.Do(Class6.work, 99, 0.3);


最后显示结果:
[C#] 纯文本查看 复制代码
已经完成1个,进度1%。
已经完成31个,进度31%。
已经完成61个,进度61%。
已经完成91个,进度91%。
已经完成99个,进度100%。

免费评分

参与人数 3吾爱币 +7 热心值 +2 收起 理由
qq7286590 + 1 + 1 我很赞同!
爱飞的猫 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Reo_52 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jstar 发表于 2024-3-1 10:12
支持一下,学习了,很不错的思路
cc007 发表于 2024-3-1 11:05
Reo_52 发表于 2024-3-1 12:46
 楼主| wincao 发表于 2024-3-15 09:39
本帖最后由 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);}
    }
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-1 19:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表