如何以MB显示长单位并在progressBar中显示百分比进度?

时间:2015-06-17 16:57:49

标签: c# .net winforms

我有这一行:

backgroundWorker1.ReportProgress((int)obj.BytesSent);

BytesSent是一个很长的变种。 我需要将它转换为(int)来报告它。

现在在backgorund1 progresschanged事件中我想将其显示为MB。 例如0.3MB 0.7MB 33MB而不是显示字节。

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            toolStripStatusLabel2.Text = e.ProgressPercentage.ToString();
        }
  1. 如何将其显示为MB而非字节?

  2. 我如何计算并在ProgressChanged事件中显示e.ProgressPercentages为progressBar中的百分比?从0到100,取决于事件的进展:

    private void videosInsertRequest_ProgressChanged(IUploadProgress obj)     {

            toolStripStatusLabel1.Text = obj.Status.ToString();
            backgroundWorker1.ReportProgress((int)obj.BytesSent);
    }
    
  3. 我想要显示已发送的MB数量,并显示progressBar中百分比的进度。

2 个答案:

答案 0 :(得分:0)

要以MB为单位显示大小,您应该在B中取大小并将其除以1024 ^ 2。要显示百分比的进度,您必须获取已下载部分的大小,并将其除以文件大小。

答案 1 :(得分:0)

  

如何将其显示为MB而不是字节?

如果您每隔10位移位一个数字,那么您的单位尺寸会更大,因此10为Kb,20为Mb,30为字节,依此类推。因此,如果您将数字除以1 << 20,您将除以兆字节中的字节数,以兆字节为单位。

double mbSent = ((double)obj.BytesSent) / (1 << 20);

我首先将BytesSent转换为double,因此我们不会得到整数除法。

  

我如何计算并在ProgressChanged事件中显示e.ProgressPercentages为progressBar中的百分比。

为此,只需将BytesSent除以总字节数再乘以100即可。

double percentComplete = ((double)obj.BytesSent) / totalBytes * 100;

然后,您可以将percentComplete分配给进度条的值。