如果要在文件下载结束后进行某些操作,通常直接使用DownloadStateChanged事件即可。
如果需要通过代码主动下载文件,且在下载完成后要进行某些操作,如果为了方便维护,希望将相关代码写在同一个事件中,那么就需要DownloadTaskAsync函数登场了。
DownloadTaskAsync函数用于异步等待文件下载完成。
语法:
Await wv.NavigationTaskAsync(timeout)
| timeout | 可选,等待的秒数,默认30秒,如果在设定时间内没有成功加载网页,则退出该方法。 |
返回值类型为CoreWebView2DownloadOperation,用于表示下载任务:
| 属性名 | 类型 | 说明 |
|---|---|---|
| Uri | String | 当前下载资源的原始下载地址URL |
| MimeType | String | 返回下载内容的类型 |
| ResultFilePath | String | 返回文件存储路径和文件名 |
| State | CoreWebView2DownloadState |
CoreWebView2DownloadState类型,用于表示下载窗台,包括三个值:
Completed: 下载成功 |
| TotalBytesToReceive | Long | 下载内容的字节数,也就是文件大小 |
NavigationTaskAsync的使用场景为:
示例
窗口的AfterLoad事件代码如下,用于打开微信下载页面:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Await
wv.EnsureCoreWebView2Async(Nothing)
wv.CoreWebView2.Navigate("https://pc.weixin.qq.com/")
添加一个按钮,用于下载微信:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
wv.querySelector("#downloadButton").click()
'模拟单击下载按钮
Dim
downop
As
CoreWebView2DownloadOperation =
Await
wv.DownloadTaskAsync(600)
'等候10分钟
If
downop
Is
Nothing
Then
'如果返回Nothing,表明下载根本没有启动,可能是服务器故障、链接错误或断网
MessageBoxA.Show("下载启动失败")
ElseIf
downop.State = CoreWebView2DownloadState.Completed
Then
Dim
str
As
String
=
"url来源:"
& downop.Uri & vbCrLf
str = str &
"存储路径:"
& downop.ResultFilePath & vbCrLf
str = str &
"文件大小:"
& downop.TotalBytesToReceive
MessageBox.Show(str,"下载成功")
ElseIf
downop.State = Microsoft.Web.WebView2.Core.CoreWebView2DownloadState.Interrupted
Then
MessageBoxA.Show("下载失败")
ElseIf
downop.State = Microsoft.Web.WebView2.Core.CoreWebView2DownloadState.InProgress
Then
downop.Cancel()
'取消下载,可选,如果不执行Cancel,则超时后会继续下载,可通过StateChanged事件获取
最终状态
MessageBoxA.Show("下载超时")
End
If