2013-09-07 2 views
0

У меня есть массив и номер, сохраненный в нем:Как связать каждый элемент массива с функцией?

int[] numbers = new int[5] {1, 2, 3, 4, 5 }; 

У меня есть метод случайным образом подобрать номер:

Random rnd = new Random(); 
int r = rnd.Next(numbers.Length); 
int Token = (numbers[r]); 

Я каждый маркер, связанный с методом:

if (Token == 1) 
{ 
    ThreadStart Ref1 = new ThreadStart(f.VehicleThread1); 
    Thread Th1 = new Thread(Ref1); 
    Th1.Start(); 
} 
if (Token == 2) 
{ 
    ThreadStart Ref2 = new ThreadStart(f.VehicleThread2); 
    Thread Th2 = new Thread(Ref2); 
    Th2.Start(); 
} 
if (Token == 3) 
{ 
    ThreadStart Ref3 = new ThreadStart(f.VehicleThread3); 
    Thread Th3 = new Thread(Ref3); 
    Th3.Start(); 
} 
if (Token == 4) 
{   
    ThreadStart Ref4 = new ThreadStart(f.VehicleThread4); 
    Thread Th4 = new Thread(Ref4); 
    Th4.Start(); 
} 
if (Token == 5) 
{ 
    ThreadStart Ref5 = new ThreadStart(f.VehicleThread5);      
    Thread Th5 = new Thread(Ref5); 
    Th5.Start(); 
} 

Но если я попытаюсь прервать нить вне этого, это приведет к появлению сообщения об ошибке.

if (Token == 1) 
    list.RemoveAt(0); 

numbers = list.ToArray(typeof(int)) as int[]; 
Th1.Abort(); 
+2

Не можете просто создать массив Func или действий в случае вам не нужно возвращаемое значение? – Save

ответ

5

Вы можете просто создать массив ThreadStart делегатов вместо:

ThreadStart[] delegates = new ThreadStart[5] 
{ 
    f.VehicleThread1, 
    f.VehicleThread2, 
    f.VehicleThread3, 
    f.VehicleThread4, 
    f.VehicleThread5 
}; 

Thread th = new Thread(delegates[Token - 1]); // -1 because array indexes start at 0 
th.Start(); 

Или, возможно, Dictionary<int, ThreadStart>:

Dictionary<int, ThreadStart> delegates = new Dictionary<int, ThreadStart>() 
{ 
    { 1, f.VehicleThread1 }, 
    { 2, f.VehicleThread2 }, 
    { 3, f.VehicleThread3 }, 
    { 4, f.VehicleThread4 }, 
    { 5, f.VehicleThread5 } 
}; 

Thread th = new Thread(delegates[Token]); // -1 not needed here 
th.Start(); 
Смежные вопросы