我有,我發現了一個DateTime.Now全局變量一旦我點擊一個按鈕:如何計算存儲的DateTime.Now和當前的DateTime.Now之間的差異?
dt = DateTime.Now;
然後,progresschanged事件中我做:
var currentTime = DateTime.Now;
現在我需要以秒爲單位計算currentTime和存儲時間(dt)之間的差值。然後我需要以秒爲單位劃分差異BytesSent。
這是我使用的progresschanged事件:
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,所以我由零上averageSpeed得到例外着鴻溝。
爲什麼diffSeconds是0?試圖計算dt和currentTime之間的時間差。
編輯
這就是我現在做的:
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);
}
但得到錯誤,現在的長averageSpeed着轉換型雙長。
這是我用來轉換爲兆字節的方法:
static double ConvertBytesToMegabytes(long bytes)
{
return (bytes/1024f)/1024f;
}
而在BackgroundWorker的progresschanged事件:
label8.Text = stringProgressReport[4];
我怎麼能向用戶顯示的東西更好?例如速度如下:
平均速度爲:0.5 MB/s,然後是0.9 MB/s,然後是1.6 MB/s這種格式或其他更好的。
減去兩個日期時間對象產生時間跨度,這有一個TotalSeconds屬性。 – asawyer
您可能需要查看https://msdn.microsoft.com/zh-cn/library/8ysw4sby(v=vs.110).aspx – sdeep
您應該使用DateTime.UtcNow而不是DateTime.Now來避免無意義的結果夏時制轉換。 –