2012-03-02 15 views
0

これがなぜ機能しないのか分かりません。私は2秒ごとにメソッドを実行するタイマーを定義しています。その方法の中で私はtry/catchを持っています。このコードを実行しようとすると、タイマーを無効にしてメッセージボックスを表示する必要があります。何らかの理由で私のメッセージボックスが2秒ごとに何度も表示されます。タイマーを無効にするのはなぜですか?Try Timer in 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(); 
     } 
    } 

ありがとうございます。 -Jason

+0

あなたが問題を再現する最小限のコードサンプルを投稿できる(つまり、実際のと、 '// Code'を置き換えますコード)? –

+0

//コードは残念ですが、try内のコードは関係ありませんでした。私の質問はキャッチについてだった。ありがとう。 – Jason

答えて

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

完璧!私はそれが私がちょうど見ていない何か愚かだったことを知っていた。ありがとう、トン! – Jason

-3

あなたの試行には何も含まれていないので、キャッチにあなたを投げるのに失敗するものはありません。

ここにコードがある場合は、例外をスローしてキャッチを押すことは確実でしょうか?

+0

tryブロックには '// Code'というコメントが含まれています。つまり、実際にtryにコードがあります。 –

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

お返事ありがとうございます。ボンジン・リーは正しいです。 MessageBoxはtimer1.Enabled = falseをブロックしていました。 – Jason

+0

@Jason:Aaah、gotcha。 – Will