Try Catch中的停止计时器

本文关键字:计时器 Catch Try | 更新日期: 2023-09-27 18:26:24

不确定为什么不起作用。我定义了一个计时器,它每2秒运行一个方法。在这种方法中,我有一个尝试。尝试执行此代码时,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

Try Catch中的停止计时器

我猜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();
    }
}

这将帮助您理解。。。

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;
    }
}

您的尝试中没有任何内容,因此没有任何内容会失败。

如果你确实有一些代码,你确定它抛出了一个异常并命中了捕获?