【问题标题】:Stop Timer Within Try Catch在 Try Catch 中停止计时器
【发布时间】:2012-03-02 18:53:14
【问题描述】:

不知道为什么这不起作用。我定义了一个计时器,它每 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();
        }
    }

谢谢。 -杰森

【问题讨论】:

  • 您能否发布重现问题的最小代码示例(即将// Code 替换为真实代码)?
  • 抱歉 //Code,但 try 中的代码无关紧要。我的问题是关于捕获的。谢谢。

标签: timer try-catch


【解决方案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();
    }
}

【讨论】:

  • 完美!我知道这是我没有看到的愚蠢的东西。非常感谢!!!
【解决方案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
    {
        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;
    }
}

【讨论】:

  • 感谢您的回复。李邦金是对的。 MessageBox 阻塞了 timer1.Enabled = false。
【解决方案3】:

你的尝试没有任何内容,所以没有任何事情会失败。

如果你确实有一些代码,你确定它会抛出异常并触发捕获?

【讨论】:

  • try块中包含注释// Code,表示try中确实有代码。
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2012-03-13
  • 1970-01-01
  • 2014-12-07
  • 2023-03-07
相关资源
最近更新 更多