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();
}
}