目前想用backgroundworker控件实现多线程的处理,有些问题请教一下各位高手:
1.创建多个线程,需要多个backgroundworker控件吗,还是只需一个backgroundworker控件即可?
2.由于我最后还要把多线程处理得到的结果显示在一个第三方控件上,请问怎么把多线程处理得到的结果显示到第三方控件上?
3.在用backgroundworker控件的时候,直接在dowork事件里执行我需要执行的函数,那怎么能让我各个线程的结果最后同步的显示到第三方控件上(因为每一块处理的数据量不等,我的意思是怎么让先完成的线程去等着最后完成的线程,然后一齐把得到的结果显示出来)。
请各位高手指点。

解决方案 »

  1.   

    BackgroundWorker的实现原理是基于事件的异步处理模式,在 foreach循环中可以使用单独的线程(Thread)来执行方法。如果这些方法有执行结果而且需要显示到UI元素上,那么可以调用Control.BeginInvoke或Control.Invoke来跨线程更新UI元素。
    另外,可以在foreach循环中试一下实例化新的BackgroundWorker来执行方法,不过需要注意的是在该处实例化的BackgourndWorker对象线程上下文是在worker_DoWork方法的上下文,不同于UI线程,因此需要调用 Control.BeginInvoke或Control.Invoke方法。
    BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += new DoWorkEventHandler(worker_DoWork);
                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
                worker.WorkerReportsProgress = true; 
                worker.RunWorkerAsync(); 
    static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {} 
    static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
            } 
    static void worker_DoWork(object sender, DoWorkEventArgs e)
            {}
      

  2.   

    非常感谢你的回答,由于第一次用这个控件,还有点不太明白,就是用backgroundworker这个控件的时候,我看了一些文章基本上都是直接在dowork事件写需要运行的函数就行了,还需要new多个thread对象吗?