using System; using System.Windows; using Caliburn.Messaging; using Caliburn.Metadata; namespace Caliburn.Actions { public class SynchronousActionExecutor : ActionExecutor { public SynchronousActionExecutor(ActionInfo actionInfo) : base(actionInfo) {} public override void Execute(DependencyObject messageSource, ActionMessage message, object target) { try { object[] parameters = DetermineParameters(message, messageSource); object result = _unboundMethod.Execute(target, parameters); BindReturnValue(message, messageSource, result); } catch(Exception e) { PerformRescue(target, e.InnerException ?? e); } } } }