Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从作为BackgroundWorker写入的列表中读取元素_C#_List - Fatal编程技术网

C# 无法从作为BackgroundWorker写入的列表中读取元素

C# 无法从作为BackgroundWorker写入的列表中读取元素,c#,list,C#,List,我在读取字符串列表时遇到问题,下面是我的代码 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 B

我在读取字符串列表时遇到问题,下面是我的代码

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);
            }
    }
}
公共部分类表单:表单
{
公共静态列表错误=新列表();
私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e){
BackgroundWorker bw=发送方作为BackgroundWorker;
//提取论点。
字符串arg=(字符串)e.参数;
//启动耗时的操作。
//e.结果=
if(tags.prog2(arg)==false)
{
//没有完整的清单
表格.错误.添加(“a”);
}
//这里有一些代码
}
私人巴士()
{
//这里有一些代码
foreach(rutas中的字符串i)
{
backgroundWorker1=新的System.ComponentModel.BackgroundWorker();
backgroundWorker1.WorkerSupportsScanCellation=true;
backgroundWorker1.DoWork+=新系统.ComponentModel.doworkenventhandler(this.backgroundWorker1\u DoWork);
backgroundWorker1.RunWorkerCompleted+=新系统.ComponentModel.RunWorkerCompletedEventHandler(此.backgroundWorker1\U RunWorkerCompleted);
backgroundWorker1.RunWorkerAsync(i);
}
foreach(form.errors中的字符串素数)
{
MessageBox.Show(prime);
}
}
}
但是列表中没有任何元素,为什么会发生这种情况

显然,我调用这两个函数

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

a关联函数1是一个backgroundWorker,因此调用次数太多,我不知道这是否与错误有关

似乎在调用
function1()
之前调用了
read()
。由于
BackgroundWorker
调用了函数1,这是完全可能的

您应该保留一个标志,指示是否调用了
function1
。如果不打电话,你应该采取预防措施

作为参考,以下代码运行良好(并产生
“aaa”
输出)


公共部分类表单
{
公共静态列表错误=新列表();
私有函数1()
{
表格.错误.添加(“aaa”);
}
//现在我尝试在其他函数中读取它。
私有void read()
{
foreach(form.errors中的字符串i)
{
控制台写入线(i);
}
}
公开无效测试()
{
功能1();
read();
}
}

您是否先调用了
function1()
?请提供用于调用这两个函数的代码。如果在某个BackgroundWorker中调用了function1,则您应该知道某种同步。向我们提供您有问题的完整代码。好吧,这就是错误,我放了一个线程。Sleep()并且它工作了,有没有办法知道所有后台工作人员是否都完成了?@Gonzalo Hernandez,当
backgroundWorker1
将完成其工作时,将调用
backgroundWorker1\u RunWorkerCompleted
BackgroundWorker.RunWorkerCompletedEvent
告诉它已完成<代码>BackgroundWorker.IsBusy告诉它正忙。
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();
    }
}