{ "CustomCodes": [ { "ID": "20250701112200484", "Name": "AutoThread", "Desc": "", "ParentID": "", "Type": "VsCode", "Level": "Item", "Statement": "", "EditCode": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\nusing System.Security.Cryptography;\r\nusing System.Windows.Markup;\r\nusing static System.Runtime.CompilerServices.RuntimeHelpers;\r\nusing ServiceStack.Configuration;\r\nusing ServiceStack;\r\n\r\nnamespace GZ.Projects.HnSx\r\n{\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 私有构造函数防止外部实例化\r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 线程安全的委托缓存\r\n private static readonly ConcurrentDictionary _methodCache = new ConcurrentDictionary();\r\n\r\n // 方法执行器\r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 获取方法信息\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 创建委托并缓存\r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 执行委托\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 根据方法签名生成对应的委托类型\r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// \r\n /// 配置初始化。\r\n /// \r\n /// \r\n /// \r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n\r\n }\r\n }\r\n}", "Code": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\nusing System.Security.Cryptography;\r\nusing System.Windows.Markup;\r\nusing static System.Runtime.CompilerServices.RuntimeHelpers;\r\nusing ServiceStack.Configuration;\r\nusing ServiceStack;\r\n\r\nnamespace GZ.Projects.HnSx\r\n{\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 私有构造函数防止外部实例化\r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 线程安全的委托缓存\r\n private static readonly ConcurrentDictionary _methodCache = new ConcurrentDictionary();\r\n\r\n // 方法执行器\r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 获取方法信息\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 创建委托并缓存\r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 执行委托\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 根据方法签名生成对应的委托类型\r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// \r\n /// 配置初始化。\r\n /// \r\n /// \r\n /// \r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n\r\n }\r\n }\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } } ], "CreationTime": "2025-07-01 10:23:43", "LastWriteTime": "2025-07-04 14:55:05", "HasSaved": true }