0

これはコードです:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{
    BackgroundWorker worker = sender as BackgroundWorker; 
    List<string> tempNamesAndTexts = new List<string>();
    string tempDownload = downloadContent();
    GetProfileNames(tempDownload);
    GetTextFromProfile(tempDownload);
    for (int i = 0; i < names.Count; i++)
    {
        tempNamesAndTexts.Add(names[i] + " " + texts[i]);            
    }
    if (InvokeRequired)
    {
        BeginInvoke(new Action(() => tempNamesAndTexts.ForEach(Item => textBox1.AppendText(Item + Environment.NewLine))));
    }
    while (true)
    {
        namesAndTexts = new List<string>();
        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            break;
        }
        else
        {
            string content = downloadContent();
            GetProfileNames(content);
            GetTextFromProfile(content);
            for (int i = 0; i < names.Count; i++)
            {
                 namesAndTexts.Add(names[i] + " " + texts[i]);
            }
            if (InvokeRequired)
            {
                bool result = tempNamesAndTexts.SequenceEqual(namesAndTexts);
                if (result == true)
                {
                }
                else
                {
                    var t = namesAndTexts.Last();

                    if (textBox1.InvokeRequired)
                    {
                        BeginInvoke(new Action(() => textBox1.AppendText(t + Environment.NewLine)), null);
                        return;
                    }
                }
            }
            reader.Close();
            response.Close();
            Thread.Sleep(30000);
        }
    }
}

問題は次の行にあります。

BeginInvoke(new Action(() => textBox1.AppendText(t + Environment.NewLine)), null);
                                    return;

私がreutnを置くなら; または壊れます。変数 t をノンストップで textBox に追加し続けます。そして、一度だけ追加したい。ループは続行されますが、変数 t は一度だけ追加されます。

4

2 に答える 2

0

ループのたびにテキストを更新する場合は、常に現在の文字列の最初の行を削除し、残りを (t + Environment.NewLine) に追加できます。しかし、それは多くの弦の切断です。カウンターが必要な場合は、進行状況バーを追加することもできます。

それがあなたが探しているものではない場合、私はあなたの質問を誤解しています. どうか明らかにしてください。

于 2012-08-12T19:34:11.140 に答える
0

あなたの質問をよく理解していることを願っています。あなたは単にチェックする必要があるようです

if(string.IsNullOrEmpty(textBox1.Text)) //ADD NEW TEXT ONLY IF THERE IS NO ANY
  BeginInvoke(new Action(() => textBox1.AppendText(t + Environment.NewLine)), null);

これは当然なく 、ループは実行され続けます。returnwhile

これがあなたが求めているものでない場合は、明確にしてください。

于 2012-08-12T19:17:39.097 に答える