/// <summary> /// Helper, obtain the correspoding fast delegate of a method info. /// </summary> public FastInvokeHelper.FastInvokeHandlerDelegate GetMessageHandler(MethodInfo methodInfo) { lock (_methodDelegates) { if (_methodDelegates.ContainsKey(methodInfo)) { return(_methodDelegates[methodInfo]); } FastInvokeHelper.FastInvokeHandlerDelegate resultHandler = FastInvokeHelper.GetMethodInvoker(methodInfo, true); _methodDelegates[methodInfo] = resultHandler; return(resultHandler); } }
/// <summary> /// Enqueue a target and Fast Invoke delegate instance for execution. /// *IMPORTANT* make sure to store the delegateInstance and reuse it over multiple calls! /// </summary> public void QueueFastDelegate(object target, bool poolAsFirstParameter, FastInvokeHelper.FastInvokeHandlerDelegate delegateInstance, params object[] args) { ThreadPoolFastEx.TargetInfo targetInfo = new ThreadPoolFastEx.TargetInfo(string.Empty, target, delegateInstance, poolAsFirstParameter, this, args); QueueTargetInfo(targetInfo); }
/// <summary> /// Constructor. /// </summary> public TargetInfo(string invokerName, object target, FastInvokeHelper.FastInvokeHandlerDelegate delegateInstance, bool poolAsFirstParameter, ThreadPoolFast pool, params object[] args) { DelegateInstance = delegateInstance; Target = target; InvokerName = invokerName; if (poolAsFirstParameter) { Args = new object[] { pool, args }; } else { Args = args; } //if (args != null && args.Length == 1) //{// Single parameter pass. // Args = new object[] { pool, args[0] }; //} //else //{ // Args = new object[] { pool, args }; //} }
/// <summary> /// Enqueue a target and Fast Invoke delegate instance for execution. /// *IMPORTANT* make sure to store the delegateInstance and reuse it over multiple calls! /// </summary> public void QueueFastDelegate(object target, FastInvokeHelper.FastInvokeHandlerDelegate delegateInstance, params object[] args) { QueueFastDelegate(target, false, delegateInstance, args); }