Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在CefSharp中完成下载_C#_Download_Chromium Embedded_Cefsharp - Fatal编程技术网

C# 在CefSharp中完成下载

C# 在CefSharp中完成下载,c#,download,chromium-embedded,cefsharp,C#,Download,Chromium Embedded,Cefsharp,我尝试做一个小的下载工具的网站与夏普。对于下载文件,我使用了CefSharp的DownloadHandler示例。现在,我想在下载完成后做一些事情。我知道“downloadItem”有一个“IsComplete”值。但如果我在“OnDownloadUpdated”方法中放入类似的内容,则这些内容将永远不会执行 if (downloadItem.IsComplete) { //do stuff } 所以,我的问题是,我必须在哪里检查我下载的

我尝试做一个小的下载工具的网站与夏普。对于下载文件,我使用了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;
    }
}
公共类下载处理程序:IDownloadHandler{
已触发OnBeforeDownloadFired上的公共事件事件处理程序;
公共事件事件处理程序OnDownloadUpdatedFired;
私人停车场;
私人下载窗口;
下载前的公共void(IBrowser浏览器、DownloadItem DownloadItem、IBeforeDownloadCallback){
var handler=OnBeforeDownloadFired;
if(处理程序!=null){
处理程序(此,下载项);
}
如果(!callback.IsDisposed){
使用(回调){
callback.Continue(downloadItem.SuggestedFileName,showDialog:true);
}
}
window=新的DownloadWindow(downloadItem.TotalBytes,downloadItem.SuggestedFileName,this);
window.Show();
}
public void OnDownloadUpdated(IBrowser浏览器、DownloadItem DownloadItem、IDownloadItemCallback回调){
var handler=OnDownloadUpdatedFired;
if(处理程序!=null){
处理程序(此,下载项);
}
如果(窗口!=null){
UpdateProgress(downloadItem.ReceivedBytes);
}
如果(停止){
callback.Cancel();
}
}
公共void StopDownload(){
停止=真;
}
}

您需要在
OnDownloadUpdated
方法中检查它

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

    if (downloadItem.IsComplete || downloadItem.IsCancelled)
        {
         //do stuff
        }
}
别忘了,您的类必须实现
IDownloadHandler
接口。
一个好的调试策略是在这个方法中放置断点,以查看/理解它何时被触发。

你能分享你完整的
下载处理程序吗?@NicolasZawada是的,有一个非常有趣的行为。第一次下载完成后,这些内容不会被执行,但会一直执行下去。这就像是一个延迟的循环。