无法从写入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
声明函数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();
}
}