asp.net - 无法使用 DownloadProgressChangedEventHandler 更新文本框
问题描述
我正在尝试使用 WebClient 和多线程从 url 下载文件。我正在尝试在下载文件时获取 ProgressPercentage,我正在尝试使用 DownloadProgressChanged 来做到这一点,但是当我尝试使用 debug.WriteLine 打印百分比时,一切正常。但是当我想更改我的 textbox.text 时,它不起作用。我想在下载时更新我的文本框。
有了这个,我正在调用一个函数。
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChangedEventHandler);
这是函数的内容:
public void DownloadProgressChangedEventHandler(object sender, DownloadProgressChangedEventArgs e)
{
//Debug.WriteLine works normal.
Debug.WriteLine(e.ProgressPercentage);
TextBox1.Text = "Progress:" +e.ProgressPercentage.ToString();
progressBarDownload3.Style.Add("width",e.ProgressPercentage.ToString()+"%");
}
解决方案
从技术上讲,虽然如果您在桌面或移动应用程序上工作,但如果您使用 ASP.NET 服务器端组件并且您的服务器在回发页面时正在为您下载某些内容,那么上述解决方案可能很有用,那么有在下载完成并将响应发送回请求客户端之前,前端无法更新。这就是整点,发送到服务器的每个请求只有在响应完成/中断后才会返回,它不能仅仅为了报告进度然后返回到它运行的点而返回。
如果您想显示正在下载的文件的进度,那么您应该选择基于客户端 ( JavaScript/jQuery
) 的解决方案。
如果您确实想用C#
代码下载文件然后尝试签出SignalR
库,这可能有助于您将后端的更改报告给前端,但同时,仅报告下载进度管理起来会很复杂.
或者,您可以将浏览器扔到下载 url,它会自动为客户端下载文件,并且下载文件的客户端可以看到浏览器的默认下载进度条。
无论如何,您都无法从服务器下载文件并byte
使用 C# 和 ASP.NET WebForms/MVC 将下载的每个文件报告到前端。除非您在操作中包含 jquery/javascript。
推荐阅读
- java - Android:listView 和 getView-Method 的问题
- python-2.7 - 如何在python中自动将今天的日期作为整数获取
- algorithm - 为什么从范围树查询中获得的子树的数量是 O(log(n))?
- kotlin - 使用 Kotlin 按字母对数组进行排序
- javascript - Javascript - concat() 的作用类似于 push()
- c++ - 使用 C++ Stream API 发生访问冲突异常
- php - 我的 laravel 路由返回 404 错误但路由存在?
- java - 使用 spring-data-rest 返回所有结果
- swift - 在全局监视器中访问触摸事件会引发错误
- gis - QGIS:读取 GeoTIFF 文件