2015-11-06 81 views
0

我想使用多个BackgroundWorkers处理聊天服务器(C#)中的客户端。但我不知道如何声明多个BackgroundWorkers。为每个客户提供一名背景工作者。我想,也许有一种方法来声明他们是这样的:我想和“INT计数”的实际值来代替“柜台”,在“bw_counter”如何用几乎相同的名称声明多个变量

for(int counter=0; ; counter++) { 
 
    BackgroundWorker bw_counter=new BackgroundWorker(); 
 
    bw_counter.RunWorkerAsync(); 
 
}

。我不知道该怎么做。有些人有想法?

我搜索了一种方法来让它工作,但我无法在SO上找到解决我的问题的线程。

+1

你能解释为什么你需要这样做

var my_workers = new BackgroundWorker[counter]; 

现在,您可以按编号引用这些?是否可以引用该单个背景工作者?根据你想要做的事情,我建议使用'List '。 – Nathan

+0

你是指“引用个人背景工作者”的含义?我希望为每个不同的客户端有不同的背景工作者(这些客户端将连接到网络或其他网络上的不同电脑),这样我就可以发送每个用户或所有用户或特定数量的用户的消息 – aron

+0

基本上,您需要要说后台工作人员0连接到客户端A,工作人员1连接到客户端B等等。然后,您可以说发送消息给客户端A,这是工作人员0,或者您可以通过遍历整个列表。下面回答的三个人正在展示您通过索引引用每个单独的后台工作人员的示例。这听起来像你所需要的。 – Nathan

回答

1

你正在尝试做的是相当多的数组的定义(或IList,至少是)。

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(); 
+0

谢谢这实际上是我需要的。我完全忘记了阵列的用途...其他答案也会这样做,但我认为这个最适合我 – aron

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(); 
+0

看起来你稍微快一点。 – Grungondola

+0

Nathan的评论实际上是第一次。 – StingyJack

+0

现在只有bw_counter没有声明?也是bw_counter actuallu bw_1当我= 1 – aron

2

为什么不只是制作一个BackgroundWorker对象的通用列表?这样你就可以很容易地通过数字来引用它们并追踪有多少。

List<BackgroundWorker> bw = new List<BackgroundWorker>(); 
for(int counter=0; ; counter++) { 
    bw.Add(new BackgroundWorker()); 
    bw[counter].RunWorkerAsync(); 
} 
相关问题