2013-06-02 5 views
-1

В моем приложении я беру файл после моего Listbox и запускаю его, используя мой класс, также у меня есть опция цикла, если я хочу продолжить воспроизведение всех моих файлов из своего списка после того, как приложение закончит все файлы, то есть начните снова все файлы, чтобы я поставил свою задачу, которая существует в моей кнопке Play, нажмите внутри. Пока она запускает мои файлы только в первый раз и после этого не продолжается, даже если мой numericUpDownLoops.Value == 2 и loopCount = 1Когда моя задача внутри цикла работает только один раз

NumericUpDown numericUpDownLoops; 

     private void btnPlay_Click(object sender, EventArgs e) 
     { 
      int loopCount = 0; 

      if (loopCount < numericUpDownLoops.Value) 
      { 
       Task.Factory.StartNew(() => 
       { 
        var files = listBoxFiles.Items.Cast<string>().ToList(); 
        Parallel.ForEach(files, 
            new ParallelOptions 
            { 
             MaxDegreeOfParallelism = 1 // limit number of parallel threads 
            }, 
            file => 
            { 
             //play my file 
            }); 
       }).ContinueWith(
t => 
{   
    loopCount++; 
} 
, TaskScheduler.FromCurrentSynchronizationContext() // to ContinueWith (update UI) from UI thread 
); 
      } 
     } 
+0

Почему вы называете 'Parallel.ForEach', тогда установите' MaxDegreeOfParallelism' значение 1, вы удаляете «параллельность» функции. Нормальный 'foreach' будет намного меньше накладных расходов. –

ответ

0

Я не вижу петлю на numericUpDownLoops.Value - проверять состояние и начать одну задачу, которая обрабатывает файлы параллельно. Попробуйте изменить if() на while().

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