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();
    }
}

 

posted on 2025-09-15 16:44  空明流光  阅读(12)  评论(0)    收藏  举报

导航