C# Webclient进度将不会显示在progressbar中

C# Webclient进度将不会显示在progressbar中,c#,.net,C#,.net,我正在尝试从服务器下载带有webclient的文件。这个效果很好。但是,当我试图在进度条中显示下载进度时,它不会给我任何可以查看的进度 我正在尝试使用DownloadFileAsync方法下载该文件,以使其拥有自己的线程,从而防止性能问题或冻结 我在任何SUB或事件之外声明WebClient: private WebClient updateDownloader = new WebClient(); 这与表单中的类似。show-Event: 它在一个试块中 我创建了一个类似这样的子项,以向pr

我正在尝试从服务器下载带有webclient的文件。这个效果很好。但是,当我试图在进度条中显示下载进度时,它不会给我任何可以查看的进度

我正在尝试使用DownloadFileAsync方法下载该文件,以使其拥有自己的线程,从而防止性能问题或冻结

我在任何SUB或事件之外声明WebClient:

private WebClient updateDownloader = new WebClient();
这与表单中的类似。show-Event:

它在一个试块中

我创建了一个类似这样的子项,以向progressbar显示进度:

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}
在表单加载事件中,我创建了eventhandler:

updateDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
这在理论上应该是可行的,但事实并非如此。我已经访问了MSDN,看到了一些信息,其中只有一些方法在起作用,但实现这一点并没有帮助


它永远不会到达这一个。我做错了什么?如果您需要更多的代码部分,请告诉我。

您需要从主UI线程更新progresbar。您不能直接从其他线程更新UI

您是否尝试将“显示的表单”事件修改为:

Application.DoEvents();
updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave);

读这个。这是一个很好的示例。kto先生不幸的是,这没有帮助,因为这个线程中的op只是有冻结的问题,但是当他修复这个问题时,他可以看到进展。我想,我的代码基本相同,但我找不到错误。我想,我只是完全失明了,因为我从一个小时后就开始处理这个问题。文件大小是多少?它太大了吗?还是连接速度慢?你能试试这个标签吗;在你的ProgressChanged事件中,看看你是否得到任何结果!我已经解决了。我只是将事件处理程序设置在了错误的位置。我已经尝试通过调用来实现这一点,但效果并不理想。你知道,我怎么做?Application.DoEvents不是一个好的解决方案。我在上面的评论中发布了解决方案。
Application.DoEvents();
updateDownloader.DownloadFileAsync(new Uri(UriGoesHere), PathToSave);