【问题标题】:Cefsharp download window for showing progress in VB.Net用于在 VB.Net 中显示进度的 Cefsharp 下载窗口
【发布时间】: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


【解决方案1】:

遇到相同或类似问题的人可能会感兴趣的简单解决方案:

  1. 在一个模块中声明Public你的Picturebox

    Module Module1
        Public PictureBox1 As New PictureBox
    End Module
    
  2. MainForm 中你可以声明你想要的属性(在InitializeComponent 之后)。示例:

    With PictureBox1
        .BorderStyle = Border3DStyle.Flat
        .Image = Bitmap.FromFile(YourImageFileName)
        '......
    End With
    
  3. DownloadHandler 类中:

    Public Function OnDownloadUpdated1(downloadItem As DownloadItem) As Boolean 
     Implements IDownloadHandler.OnDownloadUpdated
       Dim percentcomplete As Integer=downloadItem.PercentComplete * 5
        PictureBox1.Size = New Size(percentcomplete, 25)
        Return False
    End Function 
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2019-05-26
    • 2019-08-13
    • 2017-12-05
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多