下载

本指南将介绍如何管理文件下载、跟踪下载进度、获取下载完成通知等。

概述

要管理与特定 Profile 关联的文件下载,请使用以下方法:

IDownloads downloads = engine.Profiles.Default.Downloads;
Dim downloads As IDownloads = engine.Profiles.Default.Downloads

使用 IEngine.Downloads 您将获得默认配置文件的下载服务。

每次 DotNetBrowser 需要下载文件时,都会使用 StartDownloadHandler。 在此处理程序中,您可以决定是应该下载文件还是必须取消下载请求。

下面的代码示例演示了如何取消所有下载请求:

browser.StartDownloadHandler = 
    new Handler<StartDownloadParameters, StartDownloadResponse>(p =>
    {
        return StartDownloadResponse.Cancel();
    });
browser.StartDownloadHandler = 
    New Handler(Of StartDownloadParameters, StartDownloadResponse)(Function(p)
        Return StartDownloadResponse.Cancel()
    End Function)

默认情况下,所有下载请求都将被取消。

接受下载

要改变默认行为并允许下载文件,请使用以下方法:

browser.StartDownloadHandler = 
    new Handler<StartDownloadParameters, StartDownloadResponse>((p) =>
    {
        return StartDownloadResponse.DownloadTo(Path.Combine(Path.GetTempPath(),
            p.Download.Info.SuggestedFileName));
    });
browser.StartDownloadHandler =
    New Handler(Of StartDownloadParameters, StartDownloadResponse)(Function(p)
        Return StartDownloadResponse.DownloadTo(Path.Combine(Path.GetTempPath(),
            p.Download.Info.SuggestedFileName))
    End Function)

在上面的代码示例中,我们告诉库文件可以下载并保存到给定的目标文件。

确保 Chromium 主进程有权在所提供的目标目录中创建文件。 如果给定目录中已有同名文件,则该文件将被自动覆盖。 我们建议在接受文件下载之前检查权限和文件是否存在。

控制下载进程

要控制下载进程,请使用通过 StartDownloadHandler 获取的 IDownload 实例。

暂停下载

要暂停下载,请使用 IDownload.Pause() 方法:

download.Pause();
download.Pause()

恢复下载

要恢复暂停的下载,请使用 IDownload.Resume() 方法:

if (download.IsPaused) {
    download.Resume();
}
If download.IsPaused Then
    download.Resume()
End If

取消下载

除非下载处于终止状态,否则您可以随时取消下载。 这包括成功完成的下载、取消的下载和无法恢复的中断下载。 要确定下载是否处于终止状态,请使用 IDownload.State 属性。 要取消下载,请使用 IDownload.Cancel() 方法,如以下代码示例所示:

if (download.State != DownloadState.Complete) {
    download.Cancel();
}
If download.State <> DownloadState.Complete Then
    download.Cancel()
End If

下载事件

您可以跟踪下载进度,在下载取消、暂停、中断或完成时收到通知。

下载取消事件

要在 IDownload 取消时获得通知,请使用 Canceled 事件:

download.Canceled += (s, e) => { };
AddHandler download.Canceled, Sub(s, e)
End Sub

下载完成事件

要在 IDownload 完成时获得通知,请使用 Finished 事件:

download.Finished += (s, e) => { };
AddHandler download.Finished, Sub(s, e)
End Sub

下载暂停事件

要在 IDownload 暂停时获得通知,请使用 Paused 事件:

download.Paused += (s, e) => { };
AddHandler download.Paused, Sub(s, e)
End Sub

下载更新事件

要跟踪下载进度,请使用 Updated 事件:

download.Updated += (s, e) =>
{
    // 获取下载进度百分比。
    float progress = e.Progress;
    // 当前下载速度估计值(字节/秒)。
    long currentSpeed = e.CurrentSpeed;
    // 文件的总大小(以字节为单位)。
    long totalBytes = e.TotalBytes;
    // 接收(下载)的字节数。
    long receivedBytes = e.ReceivedBytes;
};
AddHandler download.Updated, Sub(s, e)
    ' 获取下载进度百分比。
    Dim progress As Single = e.Progress
    ' 当前下载速度估计值(字节/秒)。
    Dim currentSpeed As Long = e.CurrentSpeed
    ' 文件的总大小(以字节为单位)。
    Dim totalBytes As Long = e.TotalBytes
    ' 接收(下载)的字节数。
    Dim receivedBytes As Long = e.ReceivedBytes
End Sub

下载中断事件

要在 Download 由于某种原因中断时获得通知,请使用 Interrupted 事件:

download.Interrupted += (s, e) =>
{
    // 中断原因,如文件访问被拒绝、网络故障等。 
    DownloadInterruptionReason reason = e.InterruptionReason;
};
AddHandler download.Interrupted, Sub(s, e)
    ' 中断原因,如文件访问被拒绝,网络故障等。 
    Dim reason As DownloadInterruptionReason = e.InterruptionReason
End Sub
Go Top