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