【发布时间】:2015-06-02 05:12:34
【问题描述】:
我正在 VB.Net 中使用 Cefsharp 创建一个浏览器,并且我一直在尝试创建一个显示当前下载进度的下载窗口。我不知道是我做错了什么还是 CEF 的工作方式,但我通过将 browser.DownloadHandler = New DownloadHandler 添加到 Form1_Load 并创建一个像这样的新类(downloading 是我为显示进度而创建的表格):
Public Class DownloadHandler
Implements IDownloadHandler
Public Function OnBeforeDownload(downloadItem As DownloadItem, ByRef downloadPath As String, ByRef showDialog As Boolean) As Boolean Implements IDownloadHandler.OnBeforeDownload
downloadPath = downloadItem.SuggestedFileName
showDialog = True
downloading.Show()
Return True
End Function
Public Function OnDownloadUpdated1(downloadItem As DownloadItem) As Boolean Implements IDownloadHandler.OnDownloadUpdated
My.Settings.downloadpercent = downloadItem.PercentComplete.ToString
Return False
End Function
End Class
在downloading 表单上,我有显示进度的代码:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim percentcomplete As Integer = My.Settings.downloadpercent * 5
Me.PictureBox1.Size = New Size(percentcomplete, 25)
End Sub
Private Sub downloading_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
这可能不是显示ProgressBar 的最佳方式,但我有一个只有绿色条的图片框,并且表单的总宽度为500px。代码告诉它读取 My.Settings.downloadpercent 中的 PercentComplete 设置,将其乘以 5,因此当进度达到 100% 时,它将遍历整个表单。
问题是 ProgressBar 没有被更新以显示当前进度。它走了一点点,但随后就停止了。我做错了什么,还是OnDownloadUpdated 不是一个好地方?有关如何解决此问题的任何建议?
编辑:
我正在使用CefSharp 39.0.0-pre03。另外,当保存文件对话框出现时,无论你点击保存还是取消,浏览器总是触发一个LoadError,所以它会加载我制作的自定义HTML错误页面,并且由于它需要一个URL来加载HTML,我输入“http://rendering/”...所以我想这将是一个域更改。这个问题(在 cmets 中)可能是问题所在,但我们还需要弄清楚为什么它会触发 LoadError。
【问题讨论】:
-
您使用的是哪个版本的
CefSharp?有一个与下载相关的未解决问题,请参阅github.com/cefsharp/CefSharp/issues/595 可能不相关。您是否在下载完成前离开? -
最好打开一个github问题进一步讨论。
标签: vb.net winforms download cefsharp