在CefSharp中完成下载 [英] Get finished download in CefSharp

查看:140
本文介绍了在CefSharp中完成下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用CefSharp为网站制作一个小的下载工具。为了下载文件,我使用了CefSharp提供的很好的示例DownloadHandler。现在,我想在下载完成后做一些事情。我知道 downloadItem 具有一个 IsComplete 值。但是,如果我在 OnDownloadUpdated 方法中放入这样的内容,则将永远不会执行

I try do make a small downloader-tool for a website with CefSharp. For downloading files, I use the pretty well example DownloadHandler from CefSharp. Now, I want to do some things after the download is finished. I know the "downloadItem" has a "IsComplete" value. But if I put something like this in the "OnDownloadUpdated" method, stuff will never be executed

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

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

So, my question is, where I have to check if my downloaded item is completed?

编辑:完成DownloadHandler:

Complete DownloadHandler:

    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;
    }
}


推荐答案

您需要在 OnDownloadUpdated 方法中进行检查。

You need to check it inside the OnDownloadUpdated method.

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

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

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

Don't forget, your class must implement the IDownloadHandler interface. A good debugging strategy would be placing breakpoints inside this method, to see/understand when it gets fired.

这篇关于在CefSharp中完成下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆