Как создать управляемую событиями программу, в которой выполнение основного потока приостанавливается всякий раз, когда событие вызывается и обрабатывается, пока не завершится обработчик события?
Я создал следующую программу
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
Timer t = new Timer(2000);
t.Enabled = true;
t.Elapsed += new ElapsedEventHandler(TimerHandler);
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 100000000; j++) ;
Console.WriteLine(i);
}
}
public static void TimerHandler(object source, EventArgs e)
{
Console.WriteLine("Event started");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 100000000; j++) ;
Console.WriteLine("Event "+i);
}
Console.WriteLine("Event finished");
}
}
}
Предполагается, что основной метод печатает последовательные числа, а событие вызывается каждые 2 секунды.Во время обработки события предполагается, что программа выведет «Событие началось», «Событие 1» в «Событие 5», затем «Событие завершено», а затем вернется.
Я ожидал, что поток Main () остановится, покаTimerHandler () вызывается, однако мой вывод показывает, что Main () и TimerHandler () оба выполняются одновременно
0
1
2
3
4
5
6
7
8
9
10
11
Event started
12
Event 0
13
Event 1
14
Event 2
15
Event 3
16
Event 4
Event finished
17
18
19
20
21
22
23
Event started
24
Event 0
25
Event 1
26
Event 2
27
Event 3
28
Event 4
Event finished
29
30
31
32
33
Можно ли заставить метод Main () останавливаться во время обработки события?