예제 #1
0
        /// <summary>
        /// Method which calls the function
        /// </summary>
        /// <param name="data">Array containing MethodInfo, OnDoneCallback, functionParameters Array, functionOwner reference</param>
        private static void CallFunction(object data)
        {
            object[]       dataParams     = (object[])data;
            MethodInfo     funcToCall     = (MethodInfo)dataParams[0];
            OnDoneCallback onDoneCallback = (OnDoneCallback)dataParams[1];

            object[] functionParams = (object[])dataParams[2];
            object   funcOwner      = dataParams[3];

            object result = funcToCall.Invoke(funcToCall.IsStatic ? null : funcOwner, functionParams);

            if (onDoneCallback != null)
            {
                onDoneCallback(result);
            }
        }
예제 #2
0
 /// <summary>
 /// Executes a perticular function in it's own thread and calls after completion the onDoneCallback with the return value as parameter
 /// </summary>
 /// <param name="functionToCall">The function you like to call.</param>
 /// <param name="functionOwner">null if it is a static function. Otherwise refrence to instance of the object owning the function.</param>
 /// <param name="onDoneCallback">Callback which gets executed once the work in the functionToCall is done.</param>
 /// <param name="functionParameters">Parameters needed for the functionToCall.</param>
 public static void ExecuteFunction(Delegate functionToCall, object functionOwner, OnDoneCallback onDoneCallback, params object[] functionParameters)
 {
     if (AreParametersCorrect(functionToCall.Method, functionParameters) && functionToCall != null)
     {
         Thread funcThread = new Thread(new ParameterizedThreadStart(CallFunction))
         {
             IsBackground = true
         };
         m_ThreadStack.Push(new ThreadContainer()
         {
             Thread = funcThread, Params = new object[] { functionToCall.Method, onDoneCallback, functionParameters, functionOwner }
         });
     }
 }