При использовании ParameterizedThreadStart мы сталкиваемся с ограничением: мы можем запускать во втором потоке только такой метод,
который в качестве единственного параметра принимает объект типа object.
Поэтому в данном случае нам надо дополнительно привести переданное значение к типу int, чтобы его использовать в вычислениях.
Но что делать, если нам надо передать не один, а несколько параметров различного типа? В этом случае на помощь приходит классовый подход:
Листинг 18.4
1 |
class Program |
|
2 |
{ |
|
3 |
static void Main(string[] args) |
|
4 |
{ |
|
5 |
Counter counter = new Counter(); |
|
6 |
counter.x = 4; |
|
7 |
counter.y = 5; |
|
8 |
Thread myThread = new Thread(new |
|
ParameterizedThreadStart(Count)); |
||
|
||
9 |
myThread.Start(counter); |
|
10 |
//................... |
|
11 |
} |
|
12 |
public static void Count(object obj) |
|
13 |
{ |
|
14 |
for (int i = 1; i < 9; i++) |
|
15 |
{ |
|
16 |
Counter c = (Counter)obj; |
|
17 |
Console.WriteLine("Второй поток:"); |
|
18 |
Console.WriteLine(i*c.x *c.y); |
|
19 |
} |
|
20 |
} |
|
21 |
} |
|
22 |
public class Counter |
|
23 |
{ |
|
24 |
public int x; |
|
25 |
public int y; |
|
26 |
} |
Сначала определяем специальный класс Counter, объект которого будет передаваться во второй поток, а в методе Main передаем его во второй
поток.
16