2013-01-12 4 views
0

문자열 목록을 읽을 때 문제가 있습니다. 여기에 제 코드가 있습니다.목록에서 BackgroundWorker로 작성된 요소를 읽을 수 없습니다.

public partial class form : Form 
{ 
    public static List<String> errores = new List<String>(); 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){ 

     BackgroundWorker bw = sender as BackgroundWorker; 

     // Extract the argument. 
     string arg = (string)e.Argument; 

     // Start the time-consuming operation. 
     // e.Result = 
     if (tags.prog2(arg) == false) 
     { 
      //guardar en lista de no completadas 
      form.errores.Add("a"); 

     } 
    //some code here 
     } 




    private void buscar() 
    { 

    //Some code here 
     foreach (string i in rutas) 
      { 
       backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); 

       backgroundWorker1.WorkerSupportsCancellation = true; 
       backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); 
       backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted); 
       backgroundWorker1.RunWorkerAsync(i);      


      } 
      foreach (string prime in form.errores) 
      { 
       MessageBox.Show(prime); 
      } 
    } 
} 

그러나 목록에 요소가없는 이유는 무엇입니까?

은 물론 나는 두 기능

전화 Aclaration BackgroundWorker에, 그라고 너무 많이, 그래서, 나는이이 오류에 관련이 있는지 잘 모릅니다의 기능 1 .

+6

당신이 전화 했입니다'기능 1()'첫번째? –

+0

예, 둘 다 부르겠습니다. –

+4

두 함수를 호출하는 데 사용하는 코드를 제공하십시오. – oxilumin

답변

1

는 Aclaration이이 오류와 관련된 경우의 호출을 너무 많이, 나는 잘 모릅니다 있도록 자사의 BackgroundWorker에가,

read()function1() 호출하기 전에 호출 될 것 같다 기능 1. function1이 BackgroundWorker에 의해 호출되므로 매우 가능합니다.

function1이 호출되는지 여부를 나타내는 플래그를 유지해야합니다. 호출되지 않으면 예방 조치를 취해야합니다. 다음 코드를 참고로

가 잘 실행 (및 "aaa" 출력 생산)

form f = new form(); 
f.Test(); 

public partial class form 
{ 
    public static List<String> errores = new List<String>(); 

    private void function1() 
    { 
     form.errores.Add("aaa"); 
    } 

    //Now I try to read it in other function. 

    private void read() 
    { 
     foreach (string i in form.errores) 
     { 
      Console.WriteLine(i); 
     } 
    } 

    public void Test() 
    { 
     function1(); 
     read(); 
    } 
} 
+0

좋아요, 그게 오류입니다, Thread.Sleep()을 넣으면 작동합니다. 모든 배경 작업자가 완료했는지 알 수있는 방법이 있습니까? –

+0

@Gonzalo Hernandez,'backgroundWorker1_RunWorkerCompleted'는'backgroundWorker1'이 작업을 마칠 때 호출됩니다. –

+0

'BackgroundWorker.RunWorkerCompletedEvent'는 완료되었음을 알립니다. 'BackgroundWorker.IsBusy'는 그것이 바쁘다고 알려줍니다. – Tilak

관련 문제