使用 DownloadFileAsync 时如何阻塞主线程
How to Block main Thread when we use DownloadFileAsync
在我的项目中,我有一个下载文件的部分。我使用 DownloadFileAsync()
方法下载并添加两个事件处理程序:
下载进度已更改
下载文件完成
我想在使用 DownloadFileAsync 下载文件时,阻塞主线程,因为我不希望用户可以在下载完成之前点击按钮。
我的部分代码:
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChange);
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
Uri Url = new Uri(txtUrl.Text.Trim());
webClient.DownloadFileAsync(Url,FolderDialog.SelectedPath+System.IO.Path.GetFileName(txtUrl.Text) );
我该怎么做?
我在互联网上搜索但找不到有用的结果。谢谢
禁用控件比故意阻止 UI 线程更好。在 Windows 表单中,这可以通过将 Control.Enabled
设置为 false
来完成。我不熟悉 WPF,所以不能说你在那里做什么。无论如何,禁用控件可以让你在不停止正常事件处理的情况下获得你想要的行为,因此用户仍然可以移动 window,它仍然会重新绘制,等等
您真的不需要禁用整个线程,只需禁用按钮即可。如果您真的想禁用主线程,只需调用 thread.sleep 但这会破坏异步下载的目的,因为最终结果与正常下载相同。
正如其他人所说,根据我的经验,这样做的一般方法是:
- 在进行任何下载之前按钮被禁用。
- 下载开始。
- 下载完成事件处理程序再次启用按钮。
- 此外,如果出现问题,应启用该按钮。
在我的项目中,我有一个下载文件的部分。我使用 DownloadFileAsync()
方法下载并添加两个事件处理程序:
下载进度已更改
下载文件完成
我想在使用 DownloadFileAsync 下载文件时,阻塞主线程,因为我不希望用户可以在下载完成之前点击按钮。
我的部分代码:
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChange);
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
Uri Url = new Uri(txtUrl.Text.Trim());
webClient.DownloadFileAsync(Url,FolderDialog.SelectedPath+System.IO.Path.GetFileName(txtUrl.Text) );
我该怎么做? 我在互联网上搜索但找不到有用的结果。谢谢
禁用控件比故意阻止 UI 线程更好。在 Windows 表单中,这可以通过将 Control.Enabled
设置为 false
来完成。我不熟悉 WPF,所以不能说你在那里做什么。无论如何,禁用控件可以让你在不停止正常事件处理的情况下获得你想要的行为,因此用户仍然可以移动 window,它仍然会重新绘制,等等
您真的不需要禁用整个线程,只需禁用按钮即可。如果您真的想禁用主线程,只需调用 thread.sleep 但这会破坏异步下载的目的,因为最终结果与正常下载相同。
正如其他人所说,根据我的经验,这样做的一般方法是:
- 在进行任何下载之前按钮被禁用。
- 下载开始。
- 下载完成事件处理程序再次启用按钮。
- 此外,如果出现问题,应启用该按钮。