2012-03-27 7 views
1

私はMonotouchを使ってiPad用のアンケートベースのアプリを開発していて、誰かが答えに時間がかかり過ぎると最初の質問に調査を返すタイマーを実装しようとしています_survey.Timeout)。NSTimerを効果的に停止する新しいビューコントローラが押し込まれたとき

私はView Controller内で次のコードを使用していますが、これは最初に起動しても機能しますが、ループし続けます。コントローラーがプッシュされ、新しいビューで0秒から事実上再始動します。

/* ViewDidLoad */ 
if (_survey.CurrentQuestion != 1) 
     { 
      var thread = new Thread(StartTimer as ThreadStart); 
      thread.Start(); 
     }  

/* ThreadStart */ 
void StartTimer() 
{ 
     using (var pool = new NSAutoreleasePool()) 
     { 
      NSTimer.CreateScheduledTimer(_survey.Timeout, delegate { 
       _survey.CurrentQuestion = 1; 
       _survey.Responses.Clear(); 
       QuestionController qvc = new QuestionController(_survey); 
       this.NavigationController.PushViewController(qvc, false);  
      }); 
      NSRunLoop.Current.Run(); 
     } 
} 

私はそれがおそらく何かばかげて単純ですが、私の苦しみから私を置き去りにしてください!

+0

こんにちはマット、私はまた、MonoTouchで使用してiPad用の調査ベースのアプリケーションを開発する必要があると起動するための最良の方法である方法上の任意のアドバイスやガイドラインを取得したいと思います。ありがとうたくさんマットありがとう – VAAA

答えて

4

CreateScheduledTimerはNSTimerを返します。そのオブジェクトにInvalidateを呼び出し:

NSTimer timer; 

void StartTimer() 
{ 
    using (var pool = new NSAutoreleasePool()) 
    { 
     timer = NSTimer.CreateScheduledTimer(_survey.Timeout, delegate { 
      _survey.CurrentQuestion = 1; 
      _survey.Responses.Clear(); 
      QuestionController qvc = new QuestionController(_survey); 
      this.NavigationController.PushViewController(qvc, false);  
     }); 
     NSRunLoop.Current.Run(); 
    } 
} 

void StopTimer() 
{ 
    timer.Invalidate(); 
    timer.Dispose(); 
    timer = null; 
} 
+0

そのRolfのおかげで、しかし、私はStopTimerへの呼び出しを置くのですか? – Matt

+0

タイマーを一度しか実行しない場合は、タイマーコールバックに入れてから、直後にStartTimerを呼び出して新しいタイマーを作成することができます。 –

+0

ああ、実際には、ユーザーがタイムアウト前に質問に回答したときにタイマーを手動で停止することを怠っていたようです。あなたの助けに感謝しました。 – Matt

関連する問題