不确定为什么这不起作用。我定义了一个定时器,每2秒运行一次方法。在那个方法中我有一个try / catch。尝试执行此代码,catch应该禁用计时器,然后显示一个消息框。出于某种原因,我的消息框每2秒就会显示一次。为什么我的计时器不会禁用?
Timer timer1 = new Timer();
public MainForm()
{
timer1.Interval = 2000;
timer1.Tick += new EventHandler(OnTimer);
timer1.Enabled = true;
//More code
}
private void OnTimer(object sender, EventArgs e)
{
try
{
//Code
}
catch (Exception)
{
MessageBox.Show("Message");
timer1.Enabled = false;
this.Dispose();
}
}
感谢。 -Jason
答案 0 :(得分:1)
我猜MessageBox.Show("Message")
阻止了timer1.Enabled = false;
的执行,因为它是一个模态对话框。尝试禁用计时器,以便在显示模式对话框之前不会继续触发OnTimer回调:
private void OnTimer(object sender, EventArgs e)
{
try
{
// Code
}
catch (Exception)
{
timer1.Enabled = false;
MessageBox.Show("Message");
this.Dispose();
}
}
答案 1 :(得分:0)
这将有助于您理解......
Timer timer1 = new Timer();
public MainForm()
{
timer1.Interval = 2000;
timer1.Tick += new EventHandler(OnTimer);
timer1.Enabled = true;
//More code
}
private void OnTimer(object sender, EventArgs e)
{
try
{
throw new InvalidOperationException("Now the catch executes! Poof!");
}
catch (Exception)
{
MessageBox.Show("Message");
timer1.Enabled = false;
this.Dispose();
}
}
也许你打算这样做?
private void OnTimer(object sender, EventArgs e)
{
try
{
// code
}
catch (Exception)
{
MessageBox.Show("Message");
this.Dispose();
}
finally
{
timer1.Enabled = false;
}
}
答案 2 :(得分:-3)
你的尝试中没有任何内容,因此没有任何东西可以让你陷入困境。
如果你确实有一些代码,那么你肯定会抛出一个异常并触及捕获吗?