在 CefSharp 中完成下载
Get finished download in CefSharp
我尝试使用 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;
}
}
您需要在 OnDownloadUpdated
方法中检查它。
public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
{
if (downloadItem.IsComplete || downloadItem.IsCancelled)
{
//do stuff
}
}
别忘了,您的 class 必须实现 IDownloadHandler
接口。
一个好的调试策略是在此方法中放置断点,当它被触发时 see/understand。
我尝试使用 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;
}
}
您需要在 OnDownloadUpdated
方法中检查它。
public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
{
if (downloadItem.IsComplete || downloadItem.IsCancelled)
{
//do stuff
}
}
别忘了,您的 class 必须实现 IDownloadHandler
接口。
一个好的调试策略是在此方法中放置断点,当它被触发时 see/understand。