我想使用多个BackgroundWorkers来处理聊天服务器(C#)中的客户端。但我不知道如何声明多个BackgroundWorkers。每个客户的一个背景工作者。我想也许有办法像这样声明它们:
for(int counter=0; ; counter++) {
BackgroundWorker bw_counter=new BackgroundWorker();
bw_counter.RunWorkerAsync();
}

我想替换" counter"在" bw_counter"使用" int counter"的实际值。我不知道该怎么做。有些人有想法吗?
我搜索了一种让它工作的方法,但是我无法在SO上解决我的问题。
答案 0 :(得分:2)
为什么不制作BackgroundWorker对象的通用列表?通过这种方式,您可以轻松地按编号引用它们并跟踪它们的数量。
List<BackgroundWorker> bw = new List<BackgroundWorker>();
for(int counter=0; ; counter++) {
bw.Add(new BackgroundWorker());
bw[counter].RunWorkerAsync();
}
答案 1 :(得分:1)
将它们存放在列表或字典中,以便稍后获取它们。动态变量命名可能仅适用于某些高级内容(Reflection.Emit或类似内容)。
var workers = new List<BackgroundWorker>();
for(int counter=0; ; counter++)
{
var bw = new BackgroundWorker();
bw.RunWorkerAsync();
workers.Add(bw);
}
var worker1 = workers.First();
答案 2 :(得分:1)
你要做的几乎就是数组的定义(或者IList
,至少)。
var my_workers = new BackgroundWorker[counter];
现在你可以用数字来引用它们:
my_workers[0] = new BackgroundWorker();
my_workers[0].RunWorkerAsync();
使用原始代码创建数组的简单方法:
var workers = Enumerable.Range(0, counter)
.Select(_ => {
var bw = new BackgroundWorker();
bw.RunWorkerAsync();
return bw; })
.ToArray();