2 yifanzhou2012 yifanzhou2012 于 2016.04.18 17:57 提问

关于BackgroundWorker多线程同步问题

定义了一组 List bgws = new List();其中每一个bgws[i]的DoWork事件做的工作都是一样的,但是有两个参数随每个bgws[i]不同而不同,所以就如下分别写了很多DoWork0、DoWork1.。。。之类的来进行同步处理,有没有更简洁的办法,可以同时调用进行使用?
private void btnCopy_Click(object sender, EventArgs e)
{
for (int i = 0; i < srctable.Count; i++)
{
BackgroundWorker bgw = new BackgroundWorker();
bgws.Add(bgw);
bgws[i].WorkerReportsProgress = true;
bgws[i].WorkerSupportsCancellation = true;
//bgws[i].DoWork += new DoWorkEventHandler(DoWork);
//bgws[i].ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);
//bgws[i].RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork);
}
string[,] tName = new string[srctable.Count, 2];
//List tName = new List();
for (int i = 0; i < srctable.Count; i++)
{
tName[i, 0] = srctable[i];
tName[i, 1] = destable[i];

        }

        bgws[0].DoWork += new DoWorkEventHandler(DoWork0);
        bgws[0].ProgressChanged += new ProgressChangedEventHandler(UpdateProgress0);
        bgws[0].RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork0);

        bgws[1].DoWork += new DoWorkEventHandler(DoWork1);
        bgws[1].ProgressChanged += new ProgressChangedEventHandler(UpdateProgress1);
        bgws[1].RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork1);

        bgws[2].DoWork += new DoWorkEventHandler(DoWork2);
        bgws[2].ProgressChanged += new ProgressChangedEventHandler(UpdateProgress2);
        bgws[2].RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork2);

        bgws[3].DoWork += new DoWorkEventHandler(DoWork3);
        bgws[3].ProgressChanged += new ProgressChangedEventHandler(UpdateProgress3);
        bgws[3].RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork3);


        bgws[0].RunWorkerAsync();
        bgws[1].RunWorkerAsync();
        bgws[2].RunWorkerAsync();
        bgws[3].RunWorkerAsync();         
    }

1个回答

CSDNXIAOD
CSDNXIAOD   2016.04.18 18:03

多线程同步问题
多线程同步问题
关于多线程同步问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#中 使用 Backgroundworker控制UI线程 防止界面假死情况
在C#.net窗体编程中,非主线程调用该UI界面的时候往往会出现一些界面无响应或者假死的情况,我们可以用Backgroundworker很好的解决这一个问题。第一步,我们先建立一个Windows应用程序,取名XXX第二步,我们在左侧工具箱中找到组件下面的BackgroundWorker组件,拖至Form中,为了让大家很好的体验到Background的作用,我们拖放两个Backgroundw
C#多线程 BackgroundWorker类使用小例-WPF程序
1.程序实现了一个简单的使用了BackgroundWorker类的WPF程序,用于在后台线程执行给进度条赋值。 运行结果如下: 后台线程正常运行结束: 后台线程中途被取消: 2.程序仅修改了 MainWindow.xaml 文件和 MainWindow.xaml.cs 文件,两个文件内容如下 MainWindow.xaml 文件: <Window x
简单多线程 BackgroundWorker 控制(开始、暂停、继续、停止)
1、简单多线程 BackgroundWorker 控制(开始、暂停、继续、停止) 2、刷新进度条提示 3、刷新文本框提示
C# BackgroundWorker的使用,用于写后台多线程是个不错的
BackgroundWorker 可以用于启动后台线程。 主要的事件及参数:   1.DoWork——当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递DoWorkEventArgs参数;   2.RunWorkerCompleted——异步操作完成或中途终止会触发该事件。 如果需要提前终止执行后台操作,可以调用Background
关于关闭backgroundworker
我现在做的一个功能是利用webservice
BackgroundWorker 实现多线程操作
背景介绍:            在做程序的过程中,我们很可能遇到这样的情况:当我们执行一个比较耗时的操作,即界面加载数据量略大的时,在该操作未完成之前再去操作界面,就会出现停止响应的情况,这称为界面假死状态,那一个小圆圈转呀转的,想必大家看着就头疼。当然这是一个非常影响用户体验度的地方。        怎么做出一个能够及时响应的用户界面呢?多线程操作。        引入Backgroun
IOS多线程同步问题
IOS开发多线程开发,同步块,NSLock,NSCondition
【C#】BackgroundWorker类传递参数
传递多个不同类型的参数
BackgroundWorker 带进度条简单用法
namespace WinFormReport {     public partial class MainForm : Form     {         private BackgroundWorker worker = new BackgroundWorker();         public MainForm()         {             Initia
BackgroundWorker的使用方法
参考: http://www.cnblogs.com/zhjp11/archive/2009/11/20/1606912.html  http://www.csharpwin.com/csharpspace/10823r5320.shtml  C#异步调用与线程总结  首先介绍一下BackgroundWorker的相关属性和方法:   属性:   WorkerRep