public override void OnExit(FunctionExecutionArgs args)
        {
            var sw = (Stopwatch)args.Tag;
            sw.Stop();

            Debug.WriteLine("{0} executed in {1} milliseconds", args.FunctionName, sw.ElapsedMilliseconds);
        }
 public void OnEntry(FunctionExecutionArgs args)
 {
     if (ExcelDnaUtil.IsInFunctionWizard())
     {
         args.ReturnValue  = _dialogResult;
         args.FlowBehavior = FlowBehavior.Return;
     }
     // Otherwise we do not interfere
 }
        public override void OnEntry(FunctionExecutionArgs args)
        {
            // FunctionExecutionArgs gives access to the function name and parameters,
            // and gives some options for flow redirection.

            // Tag will flow through the whole handler
            args.Tag = args.FunctionName + ":" + Index;
            Debug.Print("{0} - OnEntry - Args: {1}", args.Tag, string.Join(",", args.Arguments.Select( arg => arg.ToString() )));
        }
 public void OnEntry(FunctionExecutionArgs args)
 {
     if (ExcelDnaUtil.IsInFunctionWizard())
     {
         args.ReturnValue = _dialogResult;
         args.FlowBehavior = FlowBehavior.Return;
     }
     // Otherwise we do not interfere
 }
        public override void OnEntry(FunctionExecutionArgs args)
        {
            string key = GenerateKey(args);
            args.Tag = key;

            object result = _cache[key];
            if (result != null)
            {
                // Set the return value and FlowBehavior, to short-cut the function call
                args.ReturnValue = result;
                args.FlowBehavior = FlowBehavior.Return;
            }
        }
 public override void OnSuccess(FunctionExecutionArgs args)
 {
     Debug.Print("{0} - OnSuccess - Result: {1}", args.Tag, args.ReturnValue);
 }
 public override void OnExit(FunctionExecutionArgs args)
 {
     Debug.Print("{0} - OnExit", args.Tag);
 }
 public override void OnException(FunctionExecutionArgs args)
 {
     Debug.Print("{0} - OnException - Message: {1}", args.Tag, args.Exception);
 }
 public void OnExit(FunctionExecutionArgs args)
 {
 }
 public void OnException(FunctionExecutionArgs args)
 {
 }
 public virtual void OnEntry(FunctionExecutionArgs args)
 {
 }
 public override void OnSuccess(FunctionExecutionArgs args)
 {
     // Store in cache
     _cache.Add((string)args.Tag, args.ReturnValue,
         new CacheItemPolicy { AbsoluteExpiration = DateTime.UtcNow + _cacheTimeout });
 }
 public virtual void OnEntry(FunctionExecutionArgs args)
 {
 }
 // Implemented just to satisfy the interface
 public void OnSuccess(FunctionExecutionArgs args)
 {
 }
 public void OnExit(FunctionExecutionArgs args)
 {
 }
 public void OnException(FunctionExecutionArgs args)
 {
 }
 public override void OnEntry(FunctionExecutionArgs args)
 {
     args.Tag = Stopwatch.StartNew();
 }
 // Implemented just to satisfy the interface
 public void OnSuccess(FunctionExecutionArgs args)
 {
 }
 string GenerateKey(FunctionExecutionArgs args)
 {
     var keyBuilder = new StringBuilder(args.FunctionName);
     foreach (var arg in args.Arguments)
     {
         keyBuilder.Append('\0');    // 0-delimited !?
         keyBuilder.Append(arg);
     }
     return keyBuilder.ToString();
 }