Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以MB为单位显示长单位,并在进度栏中显示进度百分比?_C#_.net_Winforms - Fatal编程技术网

C# 如何以MB为单位显示长单位,并在进度栏中显示进度百分比?

C# 如何以MB为单位显示长单位,并在进度栏中显示进度百分比?,c#,.net,winforms,C#,.net,Winforms,我有一句话: backgroundWorker1.ReportProgress((int)obj.BytesSent); BytesSent是一个长变量。 我需要将它转换为(int)来报告它 现在在backgorund1 progresschanged事件中,我想将其显示为MB。 例如,0.3MB 0.7MB 33MB代替显示字节 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEvent

我有一句话:

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();
        }
  • 如何将其显示为MB而不是字节

  • 如何在ProgressChanged事件中计算并显示e.ProgressPercentage作为progressBar中的百分比?从0到100取决于事件的进度:

    私有无效视频请求的进度已更改(IUploadProgress obj) {


  • 我还想显示发送了多少MB,还想在进度栏中以百分比显示进度。

    要以MB显示大小,您应该以B中的大小除以1024^2。要以百分比显示进度,您必须以下载的部分大小除以文件大小

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


    如果你每10位移动一个数字,你的大小就会变大一个单位,所以
    10
    是Kb,
    20
    是Mb,
    30
    是字节,依此类推。那么如果你用
    1
    除以你的数字,我怎么能把它显示为Mb而不是字节呢?
    试着除以兆字节中的字节数,也就是1024。这很简单这是一个错误的数字。@Jashaszun这是一个错误的数字。你的意思是1048576,但即使是这个数字也会被一些人认为是错误的,说它应该是1000000。@hvd哈哈,这让人尴尬……是的,这就是我的意思。另外,MB通常不是被定义为1024kB,或者(1024*1024)吗字节,而MBit定义为1000000字节?@Jashaszun MBit是位的数量,而不是字节,因此是“位”在它里面。:)1048576和1000000字节有不同的前缀,但尽管有传统,官方的前缀说1MB是1000000字节,而1MiB是1048576字节引入的。但是没有普遍的一致意见。这只是糟糕的代码。你想告诉用户“工作完成了一半”,您不能使用BytesSent执行此操作。它需要是100*sent/total。单位不重要。如果您不知道total,则无法有意义地显示进度。Scott是这样吗?double mbSent=((double)obj.BytesSent)/(1 totalBytes是以字节为单位的文件大小?对于第一部分,是的,但是您说要执行
    0.3MB
    ,如果您要强制转换为
    int
    ,则无法执行此操作;对于第二部分,如果您发送文件,则是以字节为单位的文件大小。
            toolStripStatusLabel1.Text = obj.Status.ToString();
            backgroundWorker1.ReportProgress((int)obj.BytesSent);
    }
    
    double mbSent = ((double)obj.BytesSent) / (1 << 20);
    
    double percentComplete = ((double)obj.BytesSent) / totalBytes * 100;