我有一个全局变量,我正在获取日期时间。现在,一旦我单击一个按钮:
dt = DateTime.Now;
然后在我正在做的进度更改事件中:
var currentTime = DateTime.Now;
现在我需要以秒为单位计算当前时间和存储时间(dt)之间的差异。然后我需要将字节除以秒为单位的差。
这是我正在使用的进度更改事件:
double mbSent = 0;
int percentComplete = 0;
static string progress = "";
static string ttt = "";
private void videosInsertRequest_ProgressChanged(IUploadProgress obj)
{
stringProgressReport[1] = obj.Status.ToString();
backgroundWorker1.ReportProgress(0, 1);
mbSent = ((double)obj.BytesSent) / (1 << 20);
stringProgressReport[2] = mbSent.ToString();
backgroundWorker1.ReportProgress(0, 2);
percentComplete = (int)Math.Round(((double)obj.BytesSent) / totalBytes * 100);
stringProgressReport[3] = percentComplete.ToString();
backgroundWorker1.ReportProgress(0, 3);
var currentTime = DateTime.Now;
}
在事件的底部,我需要进行计算,这样我就可以报告平均速度。文件上传速度。
编辑
我在执行以下操作时遇到异常:
var currentTime = DateTime.Now;
TimeSpan diff = currentTime - dt;
int diffSeconds = (int)diff.TotalSeconds;
long averageSpeed = obj.BytesSent / diffSeconds;
都obj。BytesSent 和 diffSeconds 是 0,所以我得到异常不能在平均速度上除以零。
为什么差异秒是 0 ?尝试计算dt和当前时间之间的时间差。
编辑
这就是我现在所做的:
if (obj.BytesSent != 0)
{
var currentTime = DateTime.Now;
TimeSpan diff = currentTime - dt;
var diffSeconds = (DateTime.Now - dt).TotalSeconds;
long averageSpeed = diffSeconds != 0 ? obj.BytesSent / diffSeconds : 0L;
double MBunits = ConvertBytesToMegabytes(averageSpeed);
stringProgressReport[4] = MBunits.ToString();
backgroundWorker1.ReportProgress(0, 4);
}
但是现在在长平均速度上出现错误无法将类型转换为长。
这是我用来转换为兆字节的方法:
static double ConvertBytesToMegabytes(long bytes)
{
return (bytes / 1024f) / 1024f;
}
在后台工人进度更改事件中:
label8.Text = stringProgressReport[4];
我怎样才能向用户展示更好的东西?例如速度,例如:
平均速度为:0.5 MB/s,然后0.9 MB/s,然后1.6 MB/s这种格式或其他更好的格式。
简单地减去两个DateTime
对象:
TimeSpan diff = currentTime - dt;
int diffSeconds = (int) diff.TotalSeconds;
var elapedSeconds = (DateTime.Now-dt).TotalSeconds;
你需要一点防御性编程来防止异常:
var diffSeconds = (DateTime.Now - dt).TotalSeconds;
long averageSpeed = diffSeconds !=0 ? obj.BytesSent / diffSeconds : 0L;