public static void FireEvent(this Page myPage, WebFormEvent e, EventArgs args)
        {
            Dictionary <WebFormEvent, bool> _EventsTriggered = new Dictionary <WebFormEvent, bool>();

            if (myPage.Items.Contains("eventsTriggered"))
            {
                _EventsTriggered = myPage.Items["eventsTriggered"] as Dictionary <WebFormEvent, bool>;
            }

            if (_EventsTriggered.ContainsKey(e))
            {
                throw new InvalidOperationException($"Previously triggered the {e.ToString()} event");
            }

            _EventsTriggered.Add(e, true);
            myPage.Items["eventsTriggered"] = _EventsTriggered;

            string methodName = "";

            switch (e)
            {
            case WebFormEvent.Init:
                //methodName = "OnInit";
                break;

            case WebFormEvent.Load:
                myPage.LoadRecursiveInternal();
                break;

            case WebFormEvent.PreRender:
                //methodName = "OnPreRender";
                myPage.PreRenderRecursiveInternal();
                break;

            case WebFormEvent.Unload:
                methodName = "OnUnload";
                break;

            default:
                break;
            }

            if (methodName == string.Empty)
            {
                return;
            }

            var thisMethod = _Type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);

            thisMethod.Invoke(myPage, new object[] { args });
        }