You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#上传文件至FTP时在Label中显示上传百分比功能失效如何解决

代码核心问题
  • 整数除法导致精度丢失:代码中PrgBar.Value与PrgBar.Maximum均为整数类型,C# 中两个整数执行除法运算时会默认舍去小数部分,例如进度到99%时,99/100的运算结果为0,只有当上传完全完成时才会得到1,因此百分比永远只会显示0%或100%,无法展示中间进度。
  • 可选优化点:每次写入10KB数据就触发一次UI线程Invoke调用,大文件上传时会频繁占用UI线程资源,容易导致界面卡顿,可适当增加每次更新的间隔阈值再触发UI更新。
修复代码

修改百分比计算逻辑,先将其中一个值转为浮点类型再进行运算即可:

{
    PrgBar.Invoke(
        (MethodInvoker)delegate
        {
            PrgBar.Maximum = (int)fileStream.Length;
        });

    byte[] buffer = new byte[10240];
    int read;
    // 可选:增加累计计数,降低UI更新频率
    long totalRead = 0;
    long lastUpdateBytes = 0;
    const long updateThreshold = 1024 * 100; // 每上传100KB更新一次UI
    while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
    {
        ftpStream.Write(buffer, 0, read);
        totalRead += read;
        // 阈值判断,避免频繁更新UI
        if (totalRead - lastUpdateBytes >= updateThreshold || totalRead == fileStream.Length)
        {
            PrgBar.Invoke((MethodInvoker)delegate
            {
                PrgBar.Value = (int)fileStream.Position;
                // 修正整数除法问题,先转浮点再计算
                int percent = (int)Math.Round((double)PrgBar.Value / PrgBar.Maximum * 100);
                LblPercent.Text = percent.ToString() + "%"; 
            });
            lastUpdateBytes = totalRead;
        }
    }
}

内容的提问来源于stack exchange,提问作者Arik m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:04