I would like help with a problem I'm having with System.Windows.Forms.Timer and menu item interactions. In the designer I have dragged in a Windows.Forms.Timer, which I use in a Game of Life implementation to determine when to switch to the next generation. I have menu subitems called Start, Stop, Pause, and Resume. I use the Start menu item to start the timer going. I wish to use Pause to temporarily stop the timer, Resume to resume running the timer, and Stop when I am done with the timer. The problem is: After I start the timer running, the UI no longer responds to the menu item events to Stop, Pause, or Resume. Shown below is the MenuItemClick event handler. The case "&Start" works, but none of the other cases are even entered once the timer is running. A breakpoint on the "switch (sender.ToString()) line is never hit after Start.
private void MenuItemClick (object sender, EventArgs e)
{
switch (sender.ToString ())
{
case "&Start":
generation = 0;
generationTimer.Interval = 1000;
generationTimer.Start ();
startToolStripMenuItem.Enabled = false;
stopToolStripMenuItem.Enabled = true;
pauseToolStripMenuItem.Enabled = true;
break;
case "Sto&p":
generationTimer.Stop ();
generationTimer.Dispose ();
startToolStripMenuItem.Enabled = true;
stopToolStripMenuItem.Enabled = false;
break;
case "&Pause":
generationTimer.Stop ();
pauseToolStripMenuItem.Enabled = false;
resumeToolStripMenuItem.Enabled = true;
break;
case "&Resume":
generationTimer.Start ();
resumeToolStripMenuItem.Enabled = false;
pauseToolStripMenuItem.Enabled = true;
break;
}
}
Shown below is the Timer Tick event handler.
private void GenerationTimer_Tick (object sender, EventArgs e)
{
generation++;
grid = game.NewGeneration ();
UpdateGrid ();
}
What am I doing wrong? What must I do to have the UI respond to menu item clicks after Start?