public void Invoke(OSDispatcher dispatcher, System.Action action, bool waitUntilDone) { DebugOutput("^^^^^^^^^^^^^^^ PERFORM from thread: " + NSThread.Current.Handle + ", MAIN: " + NSThread.MainThread.Handle + ", DISPATCHER: " + dispatcher.NativeDispatcher.Handle); var currentThread = NSThread.Current; if ((dispatcher.NativeDispatcher == currentThread) && waitUntilDone) { action(); } else { DispatcherObject.PerformSelector(new Selector(OSDispatcher.ActionSelectorName), dispatcher.NativeDispatcher, new SelectorArgument(action), waitUntilDone); } }