我正在使用webclient來dowlnoad文件。我正在計算進度百分比如下計算進度百分比
我知道將要下載的文件的文件大小(我從數據庫表中讀取)。
我依賴於WebClient的
BytesRecieved
屬性來知道在下載過程中獲取的總字節數。我使用的算法是
double dProgress = (e.BytesReceived/FileSize)*100);
來計算進度百分比。
但是我沒有得到正確的進度百分比來更新進度欄。
是否有任何方法來計算進度百分比?
我正在使用webclient來dowlnoad文件。我正在計算進度百分比如下計算進度百分比
我知道將要下載的文件的文件大小(我從數據庫表中讀取)。
我依賴於WebClient的BytesRecieved
屬性來知道在下載過程中獲取的總字節數。
我使用的算法是double dProgress = (e.BytesReceived/FileSize)*100);
來計算進度百分比。
但是我沒有得到正確的進度百分比來更新進度欄。
是否有任何方法來計算進度百分比?
看看下面的一行: double dProgress = (e.BytesReceived/FileSize)*100)
如果同時e.BytesReceived
和FileSize
是整數,那麼你將永遠有0 * 100 = 0
。
使事情是這樣的:
double dProgress = ((double)e.BytesReceived/FileSize)*100.0
這是因爲/
做整數除法將兩個整數的時候。但你不想那樣。所以你將其中一個變量轉換爲double
。
我用你的代碼,發現代碼正確生成。但是進度條僅填充四分之一。我使用的最小值爲1,最大值爲100.最小步長爲0.1,最大步長爲1.0.any想法? – logeeks
,並與BytesReceived最文件大小大概爲整數,所以你需要計算的進展是這樣的:
double dProgress = 100.0 * e.BytesReceived/FileSize;
的問題是,這兩個數字都是整數。當你devide他們,他們變得比1小,因此他們本輪下跌到0強制轉換他們做出結果的浮動:
double dProgress = ((double)e.BytesReceived/FileSize)*100)
如果你正在做一個異步下載,事件參數時處理DownloadProgressChanged
事件已經有一個ProgressPercentage
,所以沒有重新發明它的意義。一個人爲的例子:
var client = new WebClient();
var reset = new ManualResetEvent(false);
client.DownloadProgressChanged += (s, e) => Console.WriteLine("{0} percent complete", e.ProgressPercentage);
client.DownloadFileCompleted += (s, e) => reset.Set();
client.DownloadFileAsync(new Uri("http://myfilepathhere.com"), "file.name");
//Block till download completes
reset.WaitOne();
+ 1,偉大的作品:) –
我越來越e.Progresspercentage始終爲0,所以我尋找替代方法 – logeeks
試試這個:
WebClient Client = new WebClient();
Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
...
void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn/totalBytes * 100;
int percente = int.Parse(Math.Truncate(percentage).ToString());
progressBar.Value = percente;
}
或者只是使用ProgressPercentage
值。
void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
progressBar.Value = e.ProgressPercentage;
}
我知道我一年半遲了,但我必須迴應這一點。這是** double.Parse(e.BytesReceived.ToString())**拖動或者你不知道什麼是類型轉換? – mnn
這是一個非常棘手的問題,在C#中進行基本的算術運算和轉換。
首先將整數除法的結果存儲在雙變量中。然後鍵入將其轉換爲整數。
int x = 5, y = 10, answer;
double ansDouble;
answer = (int)(x/y) * 100; //percentage calculation
Console.WriteLine("percentage={0}", answer);
//>output percentage=0
answer = (int)((double)x/y) * 100; //percentage calculation
Console.WriteLine("percentage={0}", answer);
//>output percentage=0
answer = (int)((double)x/(double)y) * 100; //percentage calculation
Console.WriteLine("x={0}", answer);
//>output percentage=0
answer = (int)(x/(double)y) * 100; //percentage calculation
Console.WriteLine("x={0}", answer);
//>output percentage=0
ansDouble = ((double)x/y) * 100;
answer = (int)ansDouble;
Console.WriteLine("percentage={0}", answer);
//>output percentage=50
原來,X/Y = 0時,x和y的任何值,只要它們是整數 我們不能在一行中任何鑄造組合解決這個
你有什麼代碼? –
對不起,我沒有得到你剛剛告訴的。 – logeeks
你怎麼知道這是錯的?它總是一樣嗎? 0?喃? > 100?負?確切的問題是什麼? – Cameron