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 に答える