void IInvocation.invoke() { if (avalabilityCheck() == false) { return; } if (_hasReturnValue) { R obj = default(R); switch (_argCount) { case 0: Func <R> f = (Func <R>)_func; obj = f(); break; case 1: Func1 <R, Arg1> f1 = (Func1 <R, Arg1>)_func; obj = f1((Arg1)_argList[0]); break; case 2: Func2 <R, Arg1, Arg2> f2 = (Func2 <R, Arg1, Arg2>)_func; obj = f2((Arg1)_argList[0], (Arg2)_argList[1]); break; default: Log.infoError("Function with " + _argCount + " arguments is not supported!"); break; } _returnValue = (object)obj; } else { switch (_argCount) { case 0: VFunc vf = (VFunc)_func; vf(); break; case 1: VFunc1 <Arg1> vf1 = (VFunc1 <Arg1>)_func; vf1((Arg1)_argList[0]); break; case 2: VFunc2 <Arg1, Arg2> vf2 = (VFunc2 <Arg1, Arg2>)_func; vf2((Arg1)_argList[0], (Arg2)_argList[1]); break; default: Log.infoError("Function with " + _argCount + " arguments is not supported!"); break; } } }
//异步执行func,执行结束把他的返回值作为callback的参数回调回来// static public Operation DoFuncOnMainThread <R>(Func <R> func, long delay = 0, VFunc1 <R> callback = null) { Invocation <R, Null, Null> inv = new Invocation <R, Null, Null> (func, 0, null, true); Invocation <Null, R, Null> cbInv = callback == null ? null : new Invocation <Null, R, Null> (callback, 1, null); Operation operation = new Operation(inv, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInv); MainThread.Instance.addExcutable(operation); return(operation); }
static public Operation DoFuncOnThread <R>(LoopThread loopThrad, Func <R> func, VFunc1 <R> callback = null, bool callbackOnMainThread = true, long delay = 0) { Invocation <R, Null, Null> inv = new Invocation <R, Null, Null> (func, 0, null, true); Invocation <Null, R, Null> cbInv = callback == null ? null : new Invocation <Null, R, Null> (callback, 1); Operation operation = new Operation(inv, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInv, callbackOnMainThread); loopThrad.addExecution(operation); return(operation); }
static public Operation DoVoidFuncOnMainThread <Arg1>(VFunc1 <Arg1> func, Arg1 arg1, long delay = 0, VFunc cb = null) { object[] argList = { arg1 }; Invocation <Null, Arg1, Null> invocation = new Invocation <Null, Arg1, Null> (func, 1, argList); Invocation <Null, Null, Null> cbInvo = cb == null ? null : new Invocation <Null, Null, Null> (cb, 0, null); Operation operation = new Operation(invocation, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInvo); MainThread.Instance.addExcutable(operation); return(operation); }
static public Operation DoVoidFuncOnThread <Arg>(LoopThread loopThrad, VFunc1 <Arg> func, Arg arg, VFunc callback = null, bool callbackOnMainThread = true, long delay = 0) { object[] args = { arg }; Invocation <Null, Arg, Null> inv = new Invocation <Null, Arg, Null> (func, 1, args); Invocation <Null, Null, Null> cbInv = callback == null ? null : new Invocation <Null, Null, Null> (callback); Operation operation = new Operation(inv, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInv, callbackOnMainThread); loopThrad.addExecution(operation); return(operation); }
static public Operation DoFuncOnMainThread <R, Arg1, Arg2>(Func2 <R, Arg1, Arg2> func, Arg1 arg1, Arg2 arg2, long delay = 0, VFunc1 <R> callback = null) { object[] args = { arg1, arg2 }; Invocation <R, Arg1, Arg2> inv = new Invocation <R, Arg1, Arg2> (func, 2, args, true); Invocation <Null, R, Null> cbInv = callback == null ? null : new Invocation <Null, R, Null> (callback, 1, null); Operation operation = new Operation(inv, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInv); MainThread.Instance.addExcutable(operation); return(operation); }
static public Operation DoFuncOnThread <R, Arg1, Arg2>(LoopThread loopThrad, Func2 <R, Arg1, Arg2> func, Arg1 arg1, Arg2 arg2, VFunc1 <R> callback = null, bool callbackOnMainThread = true, long delay = 0) { object[] args = { arg1, arg2 }; Invocation <R, Arg1, Arg2> inv = new Invocation <R, Arg1, Arg2> (func, 2, args, true); Invocation <Null, R, Null> cbInv = callback == null ? null : new Invocation <Null, R, Null> (callback, 1); Operation operation = new Operation(inv, ApplicationEX.GetCurrnSystemMillisecond() + delay, cbInv, callbackOnMainThread); loopThrad.addExecution(operation); return(operation); }
static public Operation DoFuncInBackground <R, Arg1, Arg2>(Func2 <R, Arg1, Arg2> func, Arg1 arg1, Arg2 arg2, VFunc1 <R> callback = null, bool callbackOnMainThread = true, long delay = 0) { return(DoFuncOnThread <R, Arg1, Arg2>(ApplicationEX.BackgroundThread, func, arg1, arg2, callback, callbackOnMainThread, delay)); }
static public Operation DoVoidFuncInBackground <Arg>(VFunc1 <Arg> func, Arg arg, VFunc callback = null, bool callbackOnMainThread = true, long delay = 0) { return(DoVoidFuncOnThread <Arg> (ApplicationEX.BackgroundThread, func, arg, callback, callbackOnMainThread, delay)); }