在Try Catch中停止计时器

时间:2012-03-02 18:53:14

标签: timer try-catch

不确定为什么这不起作用。我定义了一个定时器,每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

3 个答案:

答案 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)

你的尝试中没有任何内容,因此没有任何东西可以让你陷入困境。

如果你确实有一些代码,那么你肯定会抛出一个异常并触及捕获吗?