2014-02-10 2 views
1

Я вызываю этот код внутри цикла for, и мне нужно сделать это, поскольку прогресс зависит от этого для значения цикла.Сообщить о прогрессе внутри цикла

bgworker1.ReportProgress(k * count); 

Но я получаю исключение:

this operation has already had operation completed called on it and further calls are illegal

Как я могу решить эту проблему ??

Edit:

private void bgworker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
for (k = 1; k <= tcount; k++) 
{ 
    bgworker1.ReportProgress(k * count); 
} 
} 

private void bgworker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     progressBar1.Value = e.ProgressPercentage; 
    } 

private void bgworker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     bgworker1.ReportProgress(k * count); 
    } 
+0

пожалуйста, проверьте, если это не может решить ваши проблема: http://stackoverflow.com/questions/12812725/method-accessed-by-more-than-one-thread-in-c-sharp-using-progressbar – Atiris

ответ

2

Один из способов решения этой докладывает прогресс в эксклюзивный для цикла для этой единственной задачи, как этот

private void bgworker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker; 

    for (int i = 1; i <= 100; i++) 
    { 
     if (worker.CancellationPending == true) 
     { 
      e.Cancel = true; 
      break; 
     } 
     else 
     { 
      //Insert your logic HERE 
      worker.ReportProgress(i * 1); 
     } 
    } 
} 
+0

вы предлагаете, как reportprogress следует вызывать в bgworker_dowork() ? – Vysakh

+1

это право. Работник, который сообщает о прогрессе в этом случае, не сам bgworker. Я использую это, чтобы сообщать о прогрессе в отчетах, в которых Q записей является динамическим и значительным. – shingonati0n

+0

Если этот метод был полезен, пожалуйста, не забудьте отметить как ответ – shingonati0n

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