2015-11-06 79 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(); 
} 
相關問題