button1 クリック イベントでは、リストボックスで選択したアイテムの数に応じて、多数のバックグラウンド ワーカーを作成します。
private void button1_Click(object sender, EventArgs e)
{
// For each item selected in the listbox
foreach (var item in listBox1.SelectedItems)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += backgroundWorker1_DoWork;
worker.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
object argument = item;
worker.RunWorkerAsync(argument);
}
offlineOnline = false;
init();
button1.Enabled = false;
this.Text = "Processing...";
label6.Text = "Processing...";
label6.Visible = true;
button2.Enabled = false;
checkBox1.Enabled = false;
checkBox2.Enabled = false;
numericUpDown1.Enabled = false;
button3.Enabled = true;
button6.Enabled = false;
button4.Enabled = true;
button5.Enabled = false;
listBox1.Enabled = false;
}
}
次に、DoWork イベントで、次のようなスレッドを使用しています。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
object input = e.Argument;
string f = GetUrl(input);
this.Invoke(new MethodInvoker(delegate { label2.Text = "Website To Crawl: "; }));
this.Invoke(new MethodInvoker(delegate { label4.Text = f; }));
if (offlineOnline == true)
{
offlinecrawling(f, levelsToCrawl, e);
}
else
{
webCrawler(f, levelsToCrawl, e);
}
}
問題は、label4.Text に 2 つのスレッドからの最後の URL が表示されることです。たとえば、2 つの異なるラベルが必要です。それぞれが他のスレッドを表示します。たとえば、label4.Text には www.cnn.com があり、label7.Text には www.cnet.com があります。
各スレッドの URL をキャッチまたは取得してラベルに入れる方法がわかりません。