Проблема использования NSTimer в потоке MonoTouch .NET - PullRequest
5 голосов
/ 19 января 2011

У меня проблема с использованием NSTimer в MonoTouch. Для начала я запустил 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 Ответ

6 голосов
/ 19 января 2011

Вы правы, проблема, которую он никогда не вызывает, состоит в том, что вы уложили поток в спящий режим и никогда не запускали цикл выполнения.Попробуйте:

NSRunLoop.Current.Run ();

Вместо вашего

Thread.Sleep (1000000);
...