2016-09-14 132 views
1

我正在编写代码从YouTube下载视频 ,我正在使用videolibrary来做到这一点。如何使用C#将ProgressBar连接到下载任务?用C#进度条显示下载进度

这是我的代码至今:

private async void buttondownload_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     using (FolderBrowserDialog fbd = new FolderBrowserDialog() { Description = "select your path ." }) 
     { 
      if (fbd.ShowDialog() == DialogResult.OK) 
      {       
       var youtube = YouTube.Default; 
       labelstatus.Text = "Downloading...."; 
       var video = await youtube.GetVideoAsync(textBoxurl.Text); 
       //setting progress bar...............................?????? 

       File.WriteAllBytes(fbd.SelectedPath + video.FullName, await video.GetBytesAsync()); 
       labelstatus.Text = "Completed!"; 
      } 
     } 
    } 
+0

的代码片段看看系统.CompnentModel.Backgroundworker。您可以将下载移动到后台线程并获得自动更新功能(由后台工作人员报告进度)。 Google教授提供了大量样本。尝试一下,如果你卡住了,让我们知道。 –

回答

0

进步改变了videolibrary 不支持,但它是在YoutubeExtractor 见下

Thread youtubeDownloader = new Thread(delegate() 
     { 

      FolderBrowserDialog b = new FolderBrowserDialog(); 

      this.Invoke((MethodInvoker)delegate() { if (b.ShowDialog() != DialogResult.OK) return; }); 
       { 
        string link = textBox1.Text; 
        IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link); 
        VideoInfo video = videoInfos 
         .First(info => info.VideoType == VideoType.Mp4 && info.Resolution == 360); 
        if (video.RequiresDecryption) 
        { 
         DownloadUrlResolver.DecryptDownloadUrl(video); 
        } 

        var videoDownloader = new VideoDownloader(video, b.SelectedPath + video.Title); 
        videoDownloader.DownloadProgressChanged += (sender1, args) => this.Invoke((MethodInvoker)delegate() { progressBar1.Value = (int)args.ProgressPercentage;}); 
        videoDownloader.Execute(); 
       } 

     }); 
     youtubeDownloader.IsBackground = true; 
     youtubeDownloader.Start(); 
+0

好的,但代码不能保存扩展文件,如mp4,mpeg ......或任何扩展 – mark

+0

You van Chance视频类型> VideoType.Mp4 –