2013-09-02 2 views
0

Я извлекаю 200 URL-адресов видео с YouTube. Но его замораживание моего приложения, как я могу заставить его работать, я использую его также в фоновом рабочем столе, но все еще не работаю.C# App замораживание при получении запроса на youtube

В этом я использовал фона рабочего, я хочу добавить названия видео в listBox2.

Initialized работник ..

worker1 = new BackgroundWorker(); 

    worker1.DoWork += new DoWorkEventHandler(worker1_DoWork); 
    worker1.ProgressChanged += new ProgressChangedEventHandler(worker1_ProgressChanged); 
    worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_RunWorkerCompleted); 

    worker1.WorkerReportsProgress = true; 
worker1.WorkerSupportsCancellation = true; 

    int ii = 0; 
    int jj = 0; 

Do работы функции.

void worker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int progressVal = 0; 
     textBox1.Invoke(new Action(
          delegate() 
          { 

           if (worker1.CancellationPending) 
           { return; } 

            string[] videoLink = textBox1.Text.Split(new char[] { '\n' }); 
            progressBar1.Maximum = videoLink.Length ; 

            foreach (string s in videoLink) 
            { 
             string videoID; 

             try 
             { 
              videoID = s.Split(new char[] { '=' })[1].Trim(); 
             } 
             catch (Exception ex) 
             { 
              MessageBox.Show(this, "Please enter correct video links\nExample : http://www.youtube.com/watch?v=123456789", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
              return; 
             } 

             YouTubeRequestSettings reqSettings = new YouTubeRequestSettings("Youtube Comments", devkey, usernames[jj], password) { Timeout = -1 }; 
             YouTubeRequest request = new YouTubeRequest(reqSettings); 

             jj++; 
             if (jj == usernames.Length) jj = 0; 

             string commentContent = listBox1.Items[ii].ToString(); 
             ii++; 
             if (ii == listBox1.Items.Count) ii = 0; 

             Comment comment = new Comment(); 
             comment.Content = commentContent; 

             try 
             { 
              Video video = request.Retrieve<Video>(new Uri("http://gdata.youtube.com/feeds/api/videos/" + videoID)); 
              worker1.ReportProgress(progressVal++, "[" + comment.Content + "] Added to : " + "VideoTitle"); 

              // request.AddComment(request.Retrieve<Video>(new Uri("http://gdata.youtube.com/feeds/api/videos/" + videoID)), comment); 
             } 
             catch (Exception ex) 
             { 
              worker1.ReportProgress(progressVal++, "Error Accoured : " + "VideoTitle"); 
             } 
            } 


          })); 


    } 

Я хочу, чтобы он прогрессировал каждый раз, когда добавлял заголовок в список, но только показывал прогресс в последнем. после завершения всего процесса.

void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     progressBar1.Value = progressBar1.Maximum; 
     this.Show(); 
    } 

    void worker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     progressBar1.Value = e.ProgressPercentage; 
     listBox2.Items.Add(e.UserState.ToString()); 

    } 
+0

Можете ли вы также показать свой рабочий код рабочего стола? – paqogomez

+0

@paqogomez Конечно. Отредактировано. –

+0

Вы создали рабочий поток, но вы возвращаете работу обратно в поток пользовательского интерфейса, используя 'textBox1.Invoke' –

ответ

0

Добавить команду обновления списка, чтобы ваш прогресс изменился.

void worker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    progressBar1.Value = e.ProgressPercentage; 
    listBox2.Items.Add(e.UserState.ToString()); 
    listbox2.Items.Refresh(); 
} 

Вы также можете реализовать INotifyPropertyChanged на креплениях (если вы делаете WPF).

+0

Нет, не работает результат по-прежнему такой же. Также у меня есть кнопка STOP в моей форме, я не могу ее остановить, потому что приложение находится в состоянии замораживания и не обрабатывает события. –

Смежные вопросы