2012-03-02 78 views
0

不知道为什么这不起作用。我定义了一个定时器,每2秒运行一次方法。在那个方法中,我有一个try/catch。尝试执行此代码,catch应禁用该计时器,然后显示一个消息框。出于某种原因,我的消息框每隔2秒显示一遍又一遍。为什么我的计时器不能禁用?停止计时器内Try try catch

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

谢谢。 - 杰森

+0

你能张贴能重现问题的最少的代码示例(如更换'与真正// Code'码)? – 2012-03-02 18:57:03

+0

对不起,//代码,但是try中的代码并不重要。我的问题是关于这个问题。谢谢。 – Jason 2012-03-02 20:19:47

回答

1

我猜MessageBox.Show("Message")是阻断timer1.Enabled = false;执行,因为它是一个模式对话框。尝试禁用计时器,所以它不会继续第一次点火计时器触发回调,显示模态对话框前:

private void OnTimer(object sender, EventArgs e) 
{ 
    try 
    { 
     // Code 
    } 

    catch (Exception) 
    { 
     timer1.Enabled = false; 
     MessageBox.Show("Message"); 
     this.Dispose(); 
    } 
} 
+0

完美!我知道这是我刚刚没有看到的愚蠢。万分感谢!!! – Jason 2012-03-02 20:17:39

-3

你的尝试没有任何内容,所以没有任何事情不会让你陷入困境。

如果你确实有一些代码在那里,你确定它抛出一个异常并触发catch?

+0

try块包含注释'// Code',这意味着try中实际上存在代码。 – 2012-03-02 18:56:46

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

感谢您的回复。 Bonjin Li是对的。 MessageBox阻止了timer1.Enabled = false。 – Jason 2012-03-02 20:17:13

+0

@Jason:啊,呃。 – Will 2012-03-02 20:32:14