Ejemplo n.º 1
0
        /// <summary>
        /// Invoke an action of a specific controller
        /// </summary>
        /// <param name="controller">The controller</param>
        /// <param name="actionName">The name of the action to execute</param>
        /// <param name="asyncMode">Indicates wheter the action should be executed in a asynchronous mode or not</param>
        /// <returns>The result of the action. Null is returned for asynchronous actions</returns>
        private IActionResult InvokeActionMethod(IController controller, string actionName, bool asyncMode, ActionParameters parameters)
        {
            //If the action should be executed asynchronously
            if (asyncMode && !this.BgAsyncMethods.IsBusy)
            {
                //building parameter
                parameters.Add("controller", controller);
                parameters.Add("actionName", actionName);
                BgAsyncMethods.RunWorkerAsync(parameters);
                return(null);
            }

            return(new ActionInvoker().Invoke(controller, actionName, parameters));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Execute asynchronous actions. It's executed in a different thread
        /// </summary>
        /// <param name="sender">The sender object</param>
        /// <param name="e">Event's arguments</param>
        void BgAsyncMethods_DoWork(object sender, DoWorkEventArgs e)
        {
            object[]    parameters = null;
            IController controller = null;
            string      actionName = null;

            object[]      results      = null;
            IActionResult actionResult = null;
            Exception     exception    = null;

            try
            {
                BgAsyncMethods.ReportProgress(1);

                //Getting arguments
                parameters = e.Argument as object[];
                //Retrieving controller and action to invoke
                controller = parameters[0] as IController;
                actionName = parameters[1] as string;

                //Building de result object
                results = new object[] { actionResult, controller, exception /*exception*/ };

                //Executing action
                actionResult = (IActionResult)controller.GetType().GetMethod(actionName).Invoke(controller, null);

                //Storing the result object for the next step
                results[0] = actionResult;
                e.Result   = results;
            }
            catch (Exception ex)
            {
                //Init the result object
                results[2] = ex.InnerException; /* The innerException is used because the Invoke method of a MethodInfo throws a System.TargetInvocationException*/
                e.Result   = results;
            }
        }