wpf 中显示约束只创建一个窗口实例
wpf 做了一个软件锁定功能, 因有文件关联事件,菜单事件和按钮单击事件都可能导致需要显示密码验证,为了避免显示多个实现,我开始使用了如下代码,肯定是没成功,怀疑是多线程原因导致:
private static bool loginShowing = false; private static readonly object loginLock = new object(); // 静态锁对象 public static bool? ShowLogin() { lock (loginLock) // 获取锁 { if (loginShowing) return false; // 或者 null,取决于你想如何表示“未打开新窗口” loginShowing = true; } // 释放锁 try { var wndLogin = new LoginWindow(); return wndLogin.ShowDialog(); } finally { lock (loginLock) { loginShowing = false; } } }
之后经过与 AI 沟通,使用如下代码成功解决了问题:
private static SemaphoreSlim loginSemaphore = new SemaphoreSlim(1, 1); public static bool? ShowLogin() { if (!loginSemaphore.Wait(100)) { TipHelper.ShowTip("请验证密码!"); return false; } try { var wndLogin = new LoginWindow(); return wndLogin.ShowDialog(); } finally { loginSemaphore.Release(); } }
桂棹兮兰桨,击空明兮溯流光。
浙公网安备 33010602011771号