public static Coroutine StartCoroutine(this MonoBehaviour behaviour, System.Delegate method, params object[] args) { if (behaviour == null) throw new System.ArgumentNullException("behaviour"); if (method == null) throw new System.ArgumentNullException("method"); System.Collections.IEnumerator e; if (com.spacepuppy.Utils.TypeUtil.IsType(method.Method.ReturnType, typeof(System.Collections.IEnumerable))) { e = (method.DynamicInvoke(args) as System.Collections.IEnumerable).GetEnumerator(); } else if (com.spacepuppy.Utils.TypeUtil.IsType(method.Method.ReturnType, typeof(System.Collections.IEnumerator))) { e = (method.DynamicInvoke(args) as System.Collections.IEnumerator); } else { throw new System.ArgumentException("Delegate must have a return type of IEnumerable or IEnumerator.", "method"); } return behaviour.StartCoroutine(e); }
public static RadicalCoroutine StartRadicalCoroutine(this MonoBehaviour behaviour, System.Delegate method, object[] args = null, RadicalCoroutineDisableMode disableMode = RadicalCoroutineDisableMode.Default) { if (behaviour == null) throw new System.ArgumentNullException("behaviour"); if (method == null) throw new System.ArgumentNullException("method"); System.Collections.IEnumerator e; if (com.spacepuppy.Utils.TypeUtil.IsType(method.Method.ReturnType, typeof(System.Collections.IEnumerable))) { e = (method.DynamicInvoke(args) as System.Collections.IEnumerable).GetEnumerator(); } else if (com.spacepuppy.Utils.TypeUtil.IsType(method.Method.ReturnType, typeof(System.Collections.IEnumerator))) { e = (method.DynamicInvoke(args) as System.Collections.IEnumerator); } else { throw new System.ArgumentException("Delegate must have a return type of IEnumerable or IEnumerator.", "method"); } var co = new RadicalCoroutine(e); co.Start(behaviour, disableMode); return co; }
public System.IAsyncResult BeginInvoke(System.Delegate method, object[] args) { return new AsyncResult(method.DynamicInvoke(method, args)); }
public object Invoke(System.Delegate method, object[] args) { return method.DynamicInvoke(args); }
private object DynamicInvokeCommand(System.Delegate commandDelegate, object[] agrs) { // execute try { object ret = (string)commandDelegate.DynamicInvoke(agrs); return ret; } catch (Exception exc) { // throw inner exception if exists throw (exc.InnerException != null ? exc.InnerException : exc); } }