我有以下簡單的代碼:WebClient.DownloadProgressChanged:Console.WriteLine()是阻塞UI線程
private void btn_download_Click(object sender, EventArgs e){
WebClient client = new WebClient();
client.DownloadProgressChanged += client_DownloadProgressChanged;
client.DownloadFileAsync(new Uri("http://.../file.zip"), "file.zip");
}
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e){
//Prints: "Downloaded 3mb of 61.46mb (4%)"
Console.WriteLine("Downloaded "
+ ((e.BytesReceived/1024f)/1024f).ToString("#0.##") + "mb"
+ " of "
+ ((e.TotalBytesToReceive/1024f)/1024f).ToString("#0.##") + "mb"
+ " (" + e.ProgressPercentage + "%)"
);
}
這是爲什麼呢阻塞UI線程?當我用代碼替換Console.WriteLine()
來更新我的進度條(不在代碼中顯示)時,它可以工作。用戶界面很敏感。
是否有控制檯可以寫入?你爲什麼要從GUI程序寫入控制檯?在這裏使用'Debug'類還是'TraceListener'會更有意義? – 2014-12-03 00:54:42
當文件完全下載時,是否至少更新一次? – 2014-12-03 00:57:54
@PeterDuniho寫好控制檯基本上輸出到「標準輸出」,這可以在Visual Studio中的「輸出:窗口中查看。添加是的,這會更有意義,但我的問題不是要求替代品。知道背後的原因 – Krimson 2014-12-03 00:57:57