我有以下简单的代码: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