public static List<BaseItem> ExecuteFunction(AhkContentSource source)
        {
            ExecuteFunctionAndWaitForResult(source);

            List<string> result = GetMessageFileContents();

            var items = new List<BaseItem>();

            DateTime timeStamp = DateTime.MaxValue;
            for (int i = 0; i < result.Count; i += 2)
            {
                if (i >= result.Count - 1)
                {
                    break;
                }

                timeStamp = timeStamp.AddTicks(-1);

                var executableItem = new ExecutableItem
                {
                    Name = result[i],
                    LastAccess = timeStamp
                };

                executableItem.Arguments.Add(new StringValue
                {
                    Value = result[i + 1]
                });

                items.Add(executableItem);
            }

            return items;
        }
        private static void ExecuteFunctionAndWaitForResult(AhkContentSource source)
        {
            using (var waitHandle = new ManualResetEvent(false))
            {
                // ReSharper disable once AccessToDisposedClosure
                Action action = () => waitHandle.Set();

                var mainForm = FormFactory.Instance<MainForm>();

                try
                {
                    mainForm.AhkFunctionResultReported += action;
                    ExecuteMethod(source.ReturnType, source.Function, source.InteropArguments.ToArray());
                    waitHandle.WaitOne();
                }
                finally
                {
                    mainForm.AhkFunctionResultReported -= action;
                }
            }
        }