private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (true)
{
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)
{
for (int f = 0; f < namesAndTexts.Count -1; f++)
{
BeginInvoke(new Action(() => textBox1.AppendText(namesAndTexts[f])), null);
}
}
reader.Close();
response.Close();
Thread.Sleep(1000);
}
}
}
私はこの部分を試しました:
if (InvokeRequired)
{
for (int f = 0; f < namesAndTexts.Count -1; f++)
{
BeginInvoke(new Action(() => textBox1.AppendText(namesAndTexts[f])), null);
}
}
しかし、リストをテキストボックスに何度も追加し続けるとうまくいきません。テキストボックスに次のように表示したい:
ダニエルこんにちは
ヤロンバイ
ダニー・グッド
しかも一度だけ。
もう 1 つのことは、For im が実行されていない場合、namesAndTexts.Count - 1
エラーnamesAndTexts.Count
例外がスローされ、namesAndTexts[f] のインデックスが 0 未満ではなく、リスト未満であってはならないということです....
これが機能した後、リストが変更されたかどうかを確認し、textBox で何らかの自動プッシュアップを行う必要があります。textBox をそのサイズまで行で埋め、一番下に到達したらスクロールアップを開始し、新しい行のみを更新し続けるようにします。下から古いものを上から押し上げます。
どうすればできますか?