2017-02-13 6 views
0

cefsharp를 사용하여 여러 파일을 다운로드하는 방법.cefsharp를 사용하여 다중 파일 다운로드

이 코드를 사용하여 파일을 다운로드 할 수 있습니다. 하지만 내 문제는 단지 첫 번째 링크를 다운로드하는 것입니다. 어떻게하면 cefsharp가 여러 파일을 다운로드 할 수 있습니까?

foreach (var item in ListofLinks) 
       { 
browser.Load(item); 
} 

//on my form load 

browser.DownloadHandler = new MyDownloadHandler(); 

    class MyDownloadHandler : 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); 
        } 

       } 
      } 

내가 내 프로젝트에 https://github.com/cefsharp/CefSharp/blob/84930b0784fb8d934af22f4f3cd8a089af6eccf1/CefSharp/IBrowserHost.cs

을 추가 OnBeforeDownloadFired()의 구현이 표시되지 않기 때문에 나는

인터페이스 I는 다음을 포함하고있어

class DownloadMe : IBrowserHost{ 

} 


public void StartDownload(string url) 
      { 
       //what code do i need here? 
      } 
+0

소스를 검색하는 대신로드의 StartDownload를 호출 시도 방법을 찾으려면. – amaitland

+0

어디서 찾을 수 있습니까? –

+0

GitHub는 소스 – amaitland

답변

1

를 구현 DownloadHandler 클래스를 사용하는 방법에 대한 많은 온라인 예제에서.

다운로드 링크에 대상이 "_blank"이면 파일 다운로드 (예 : .mobi 전자 책)와 관련된 잔소리가 생기는 문제를 해결하는 데 도움이됩니다. 대상이 없으면 다운로드 대화 상자가 나타납니다. _blank 타겟으로, 팝업 창을 숨기고 브라우저에 새로운 사용자 정의 탭을 열어야했지만,이 경우 다운로드 대화 상자가 표시되지 않았습니다.

나는 이것이 옳다고 생각한다. 그것은하는 데 도움이, 또는 적어도 당신에게 시작주는 희망 : 코드에서

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

를 :위한

foreach (var item in ListofLinks) 
       { 
browser.Load(item); 
} 

변경을 :

foreach (var item in ListofLinks){ 
var cefBrowser = browser.GetBrowser(); 
IBrowserHost ibwhost = cefBrowser == null ? null : cefBrowser.GetHost(); 
ibwhost.StartDownload(item); 
}