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

vla*_*259 5 c# iphone timer nstimer xamarin.ios

我在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");
}
Run Code Online (Sandbox Code Playgroud)

Geo*_*ton 6

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

NSRunLoop.Current.Run ();
Run Code Online (Sandbox Code Playgroud)

而不是你的

Thread.Sleep (1000000);
Run Code Online (Sandbox Code Playgroud)