Monobjc.Foundation.NSThread.NSThreadLauncher.Launch C# (CSharp) Method

Launch() private method

private Launch ( Id anArgument ) : void
anArgument Id
return void
            public void Launch(Id anArgument)
            {
                try
                {
                    if (this.actionWithState != null)
                    {
                        var val = anArgument.SafeCastTo<NSValue>();
                        if (val != null)
                        {
                            GCHandle stateHandle = GCHandle.FromIntPtr(val.PointerValue);
                            Object state = stateHandle.Target;
                            stateHandle.Free();

                            this.actionWithState(state);
                        }
                        else
                        {
                            this.actionWithState(null);
                        }
                    }
                    else if (this.actionWithId != null)
                    {
                        this.actionWithId(anArgument);
                    }
                    else if (this.action != null)
                    {
                        this.action();
                    }
                }
                catch (Exception ex)
                {
                    // If this delegate is invoked on a separate thread, the developer should have
                    // wrapped the body in a try / catch. If they didn't, at least log the
                    // exception to help them troubleshoot. Otherwise, the thread will just die
                    // and they may not notice an issue.
                    Logger.Debug("ObjectiveCRuntime", ex.ToString());
                    throw;
                }
                finally
                {
                    this.Autorelease();
                }
            }
        }
NSThread.NSThreadLauncher