コード例 #1
0
        public static void Raise(this object source, string eventName, params object[] args)
        {
            var eventDelegate = new Traverse(source).Field(eventName).GetValue <MulticastDelegate>();

            if (eventDelegate != null)
            {
                var param = new object[args.Length + 1];
                param[0] = source;
                for (int i = 0; i < args.Length; i++)
                {
                    param[i + 1] = args[i];
                }
                foreach (var handler in eventDelegate.GetInvocationList())
                {
                    handler.Method.Invoke(handler.Target, param);
                }
            }
        }