无法从写入BackgroundWorker的列表中读取元素

本文关键字:列表 读取 元素 BackgroundWorker | 更新日期: 2023-09-27 17:52:12

我有一个问题,当读取字符串列表,这是我的代码。

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

表示read()function1()之前被调用。因为函数1是由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();
    }
}