首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎么使用BackgroundWorker增加多个线程

2013-03-06 
如何使用BackgroundWorker增加多个线程已经会使用BackgroundWorker增加后台线程,但问题是只有一个线程,访

如何使用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核心的话,线程开得越多越慢!

热点排行