在MonoTouch .NET线程中使用NSTimer的问题

时间:2011-01-19 16:29:59

标签: c# iphone timer xamarin.ios nstimer

我在使用MonoTouch中的NSTimer时遇到问题。首先,我在我的主线程中运行了一个NSTimer,它起作用了。但是,我已经将计时器移动到一个单独的线程,我从来没有得到回调。我猜这是因为我的.NET风格线程不是一个运行循环 - 但我对MonoTouch / iOS很新,所以不确定。

我已将代码提取到测试项目并遇到了同样的问题。这是失败的代码:

var thread=new Thread(StartTimer as ThreadStart);
thread.Start();

[Export("StartTimer")]
void StartTimer()
{
    using(var pool = new NSAutoreleasePool())
    {
         timer=NSTimer.CreateRepeatingScheduledTimer(2,delegate { Twitch() } );
         Thread.Sleep(1000000);    // do I have to yield here somehow?
    }
}

void Twitch()
{
    Debug.WriteLine("Twitch");
}

1 个答案:

答案 0 :(得分:6)

你是对的,它永远不会触发的问题是你让线程进入睡眠状态并且从未启动过runloop。尝试:

NSRunLoop.Current.Run ();

而不是你的

Thread.Sleep (1000000);