static async ETTask <T> __InnerOpenWindow <T, P1, P2, P3, P4>(this UIManagerComponent self, UIWindow target, P1 p1, P2 p2, P3 p3, P4 p4) where T : Entity { CoroutineLock coroutineLock = null; try { coroutineLock = await CoroutineLockComponent.Instance.Wait(CoroutineLockType.UIManager, target.GetHashCode()); target.Active = true; T res = target.GetComponent(target.ViewType) as T; var need_load = target.LoadingState == UIWindowLoadingState.NotStart; if (need_load) { target.LoadingState = UIWindowLoadingState.Loading; await Game.EventSystem.PublishAsync(new UIEventType.InnerOpenWindow() { path = target.PrefabPath, window = target }); } Game.EventSystem.Publish(new UIEventType.ResetWindowLayer() { window = target }); await self.__AddWindowToStack(target, p1, p2, p3, p4); return(res); } finally { coroutineLock?.Dispose(); } }