0

读取字符串列表时遇到问题,这是我的代码。

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 function1它是一个backgroundWorker,所以它被调用了太多次,我不知道这是否与错误有关。

4

1 回答 1

1

Aclaration function1它是一个backgroundWorker,所以它调用了太多次,我不知道这是否与错误有关

似乎read()在调用之前function1()调用。由于 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();
    }
}
于 2013-01-12T19:06:18.177 回答