MessageBox.showメソッドを実行するとMessageBoxが表示されます。そしてボタンをクリックしないと次の処理がおこなわれません。だから以下のコードを実行してもMessageBoxが一気に10個表示されることはありません。
1 2 |
for (int i = 0; i < 10; i++) MessageBox.Show("メッセージを表示"); |
ところがTimerを使う場合は違ってきます。以下のコードを実行すると0.1秒おきにMessageBoxが表示され続けます。しかも操作を受け付けるのは最後に表示されたMessageBoxだけなので、ミスに気づいたとしてもFormを閉じることができません。ゲームをつくる場合、デバッグ目的でMessageBoxを表示させる場合は注意しないと死ぬことになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public partial class Form1 : Form { Timer Timer = new Timer(); int TickCount = 0; public Form1() { InitializeComponent(); Timer.Interval = 100; Timer.Tick += Timer_Tick; Timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { // 無限に表示され続けると収拾がつかなくなるので10回で終わりにする TickCount++; if (TickCount >= 10) Timer.Stop(); MessageBox.Show("メッセージを表示"); } } |
上記のコードは無限に表示され続けると収拾がつかなくなるので10回で終わりにしていますが、以下のコードでは10個以上のMessageBoxが表示されます。理由はボタンをクリックしないと次の処理がおこなわれず、TickCountがインクリメントされないからです。実際には次々と表示されるMessageBoxを10回消すとTickCountが10になるので一応ストップさせることができます。
1 2 3 4 5 6 7 8 9 |
private void Timer_Tick(object sender, EventArgs e) { MessageBox.Show("メッセージを表示"); // MessageBoxを消さないと以下のコードは実行されない TickCount++; if (TickCount >= 10) Timer.Stop(); } |
以下のコードは0.1秒ごとにTickCountの値をタイトルバーに表示させるプログラムです。ボタンをクリックするとMessageBoxが表示されます。[OK]をクリックしてMessageBoxを消さないと他の処理ができないのですが、表示させているあいだもタイトルバーの数字は増加しつづけます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public partial class Form1 : Form { Timer Timer = new Timer(); int TickCount = 0; public Form1() { InitializeComponent(); Timer.Interval = 100; Timer.Tick += Timer_Tick; Timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { TickCount++; Text = TickCount.ToString(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("メッセージを表示"); } } |