DispatchQueue内でNSRunLoop.Current.RunUntilを呼び出すコードが動かなくなってしまった その3
解決できた。前回の記事の追記にて見つけたページにヒントがあった。Dispatch内でRunLoopは扱えないとのこと。これをふまえて修正したコードはこのようになった。
DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Low).DispatchAsync(delegate { DispatchQueue.MainQueue.DispatchAsync(delegate () { NSTimer.CreateScheduledTimer(new TimeSpan(1), delegate { UIAlertView alert = new UIAlertView(); bool dismiss = false; alert.Message = "TEST"; alert.AddButton("OK"); alert.Dismissed += delegate { dismiss = true; }; alert.Show(); while (!dismiss) { NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.5)); } }); }); });
Dispatch内でRunLoopが扱えないのだったら、逆にDispatch内からNSTimer経由で呼び出したらどうだろうという発想。これが正しいのかどうかは判らないが問題を回避できたのでとりあえずこのまま行ってみようと思う。