【问题标题】:Get finished download in CefSharp在 CefSharp 中完成下载
【发布时间】:2017-09-12 11:06:33
【问题描述】:

我尝试使用 CefSharp 为网站制作一个小型下载工具。对于下载文件,我使用了来自 CefSharp 的非常好的示例 DownloadHandler。现在,我想在下载完成后做一些事情。我知道“downloadItem”有一个“IsComplete”值。但是如果我把这样的东西放在“OnDownloadUpdated”方法中,东西就永远不会被执行

        if (downloadItem.IsComplete) {
            //do stuff
        }

所以,我的问题是,我必须在哪里检查我下载的项目是否已完成?

编辑:完整的下载处理程序:

    public class DownloadHandler : IDownloadHandler {

    public event EventHandler<DownloadItem> OnBeforeDownloadFired;
    public event EventHandler<DownloadItem> OnDownloadUpdatedFired;
    private bool stop;
    private DownloadWindow window;

    public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) {
        var handler = OnBeforeDownloadFired;
        if (handler != null) {
            handler(this, downloadItem);
        }

        if (!callback.IsDisposed) {
            using (callback) {
                callback.Continue(downloadItem.SuggestedFileName, showDialog: true);
            }
        }
        window = new DownloadWindow(downloadItem.TotalBytes, downloadItem.SuggestedFileName, this);
        window.Show();
    }

    public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) {
        var handler = OnDownloadUpdatedFired;
        if (handler != null) {
            handler(this, downloadItem);
        }

        if (window != null) {
            window.UpdateProgress(downloadItem.ReceivedBytes);
        }

        if (stop) {
            callback.Cancel();
        }
    }

    public void StopDownload() {
        stop = true;
    }
}

【问题讨论】:

  • 你能分享你完整的DownloadHandler吗?
  • @NicolasZawada 是的,做到了

标签: c# download chromium-embedded cefsharp


【解决方案1】:

您需要在OnDownloadUpdated 方法中检查它。

public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
{

    if (downloadItem.IsComplete || downloadItem.IsCancelled)
        {
         //do stuff
        }
}

别忘了,你的类必须实现IDownloadHandler 接口。 一个好的调试策略是在这个方法中放置断点,以便在它被触发时查看/理解。

【讨论】:

  • 有一个非常有趣的行为。第一次下载完成时,这些东西不会被执行,但之后的所有时间。这就像一个周期延迟了。
猜你喜欢
  • 2017-06-18
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2023-01-01
  • 2012-12-24
相关资源
最近更新 更多