在CefSharp中完成下载 [英] Get finished download in 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屋!