读书人

怎么使用BackgroundWorker增加多个线程

发布时间: 2013-03-06 16:20:31 作者: rapoo

如何使用BackgroundWorker增加多个线程
已经会使用BackgroundWorker增加后台线程,但问题是只有一个线程,访问1到1000要好几秒,速度还不会很快,我想利用BackgroundWorker增加线程,1秒之内搞定,请问如下代码如何改造呢?


BackgroundWorker bw = null;

public Form5()
{
InitializeComponent();

bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}

void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i < 1000; i++)
{
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}

this.Invoke((MethodInvoker)delegate
{
this.ShowText(String.Format("第{0}步正在执行", i));
});
}
}

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.ShowText("执行完毕!");
}

private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;

bw.RunWorkerAsync();
}

private void button2_Click(object sender, EventArgs e)
{
this.button1.Enabled = true;
this.button2.Enabled = false;



bw.CancelAsync();
}

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
RichTextBox textbox = (RichTextBox)sender;

textbox.SelectionStart = textbox.Text.Length;
textbox.ScrollToCaret();
}

void ShowText(string text)
{
this.richTextBox1.Text += text + Environment.NewLine;
}


[解决办法]
百度没封杀你?

使用线程池

for (int i = 0; i < 20; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), i);
}

[解决办法]
你没有20个CPU核心的话,线程开得越多越慢!

读书人网 >asp.net

热点推荐