我正在使用多个backgroundworker
来执行通过网络连接的过程。根据 中的行数datagridview
,它获取每一行的值并通过另一个执行长过程的类方法。这里我使用for循环来启动backgroundworker,所以问题是进程何时启动,基于计数datagridview
更多backgroundworkers开始运行的行数。但我想限制这一点。例如,如果我有 50 行,我只想一次执行 5 个后台工作程序。在这 5 个完成任务后,接下来的 5 个必须开始。那么如何限制那些?
我使用了以下代码:
Backgroundworker bs;
private void button1_Click(object sender, EventArgs e)
{
threadNumber = 0;
threadRunning = 0;
for(int i=0;i<datagridview1.Rows.Count;i++)
{
bs = new Backgroundworker();
bs.DoWork += new DoWorkEventHandler(bs_DoWork);
bs.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bs_Completed);
bs.WorkerSupportCancellation = true;
bs.RunWorkerAsync(i);
}
}
private void bs_DoWork(object sender, DoWorkEventArgs e)
{
int i = (int)e.Argument;
while(bs.CancellationPending !=true && threadNumber < datagridview1.Rows.Count)
{
lock (this)
{
for (int i = 0; i < Max_Threads - threadRunning; i++)
{
if (threadNumber < datagridview1.Rows.Count)
{
Webmethod obj = new webmethod();
obj.Callmethod(i); // this takes long time to perform
threadNumber +=1;
threadRunning +=1;
}
}
}
}
}
但是当我开始这个过程时,所有的后台工作人员都开始了这个任务。任何人都可以帮助我吗?
提前致谢..