我正在使用Monotouch为iPad开发一个基于调查的应用程序,我正在尝试实现一个计时器,如果有人花太长时间回答(_survey.Timeout),将调查返回到第一个问题。
我在视图控制器中使用以下代码,这在第一次被触发时工作正常但它继续循环 - 所以问题是,如何在新视图控制器时停止线程并正确处理计时器被推动,以便在新视图中从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 :(得分: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;
}