2017-06-09 59 views
0

不知道我试图实现的是否可能,但我试图在CefSharp winforms中创建自定义下载的栏。CEFSharp Winforms调用处理程序的窗体上的控件

我已经在我的主窗体上创建了一个控件,我想在文件下载完成后可见,我遇到的问题是我无法从DownloadHandler中引用窗体。

如果我创建窗体的新实例,它将打开一个新的空白窗体,我不想要。

这是我的代码。

class DownloadHandler: IDownloadHandler 
{ 
    public event EventHandler<DownloadItem> OnBeforeDownloadFired; 

    public event EventHandler<DownloadItem> OnDownloadUpdatedFired; 

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

    public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) 
    { 
     var handler = OnDownloadUpdatedFired; 
     if (handler != null) 
     { 
      handler(this, downloadItem); 
     } 
     ///This is where i want to make the control visible but i cant seem to reference it. 
     panelDownloads.Visible = true; 
    } 
} 
+0

那么事件OnDownloadUpdatedFired注册? – Abhishek

回答

0

经过大量的谷歌搜索之后,我将其添加到您的代码中。我认为这是对的。希望它有帮助,或至少给你一个开始:

DownloadHandler downer = new DownloadHandler(this); 
browser.DownloadHandler = downer; 
downer.OnBeforeDownloadFired += OnBeforeDownloadFired; 
downer.OnDownloadUpdatedFired += OnDownloadUpdatedFired; 

private void OnBeforeDownloadFired(object sender, DownloadItem e) 
{ 
    this.UpdateDownloadAction("OnBeforeDownload", e); 
} 

private void OnDownloadUpdatedFired(object sender, DownloadItem e) 
{ 
    this.UpdateDownloadAction("OnDownloadUpdated", e); 
} 

private void UpdateDownloadAction(string downloadAction, DownloadItem downloadItem) 
{ 
    /* 
    this.Dispatcher.Invoke(() => 
    { 
     var viewModel = (BrowserTabViewModel)this.DataContext; 
     viewModel.LastDownloadAction = downloadAction; 
     viewModel.DownloadItem = downloadItem; 
    }); 
    */ 
} 

// ... 

public class DownloadHandler : IDownloadHandler 
{ 
    public event EventHandler<DownloadItem> OnBeforeDownloadFired; 

    public event EventHandler<DownloadItem> OnDownloadUpdatedFired; 

    MainForm mainForm; 

    public DownloadHandler(MainForm form) 
    { 
     mainForm = form; 
    } 

// ... 
+0

这有助于解决下载文件(例如.mobi电子书)的唠叨问题,如果下载链接的目标为“_blank”。 如果没有目标,则触发下载对话框。使用_blank目标,我必须禁止弹出窗口并在浏览器中打开一个新的自定义选项卡,但是当发生这种情况时,不会触发下载对话框。 –

相关问题