babalae/better-genshin-impact · error · InvalidOperationException

最多同时打开 {MaxWindows} 个HTML遮罩窗口

Error message

最多同时打开 {MaxWindows} 个HTML遮罩窗口

What it means

Error "最多同时打开 {MaxWindows} 个HTML遮罩窗口" thrown in babalae/better-genshin-impact.

Source

Thrown at BetterGenshinImpact/View/HtmlMaskWindow.xaml.cs:80

    #region 静态窗口管理

    /// <summary>
    /// 显示HTML遮罩窗口
    /// </summary>
    public static string Show(string url, string? id, string workDir)
    {
        return Application.Current.Dispatcher.Invoke(() =>
        {
            // 指定ID时先关闭已有窗口
            if (id != null && _windows.TryGetValue(id, out var existing))
            {
                existing.Close();
            }

            if (_windows.Count >= MaxWindows)
            {
                throw new InvalidOperationException($"最多同时打开 {MaxWindows} 个HTML遮罩窗口");
            }

            var window = new HtmlMaskWindow(url, id, workDir);
            string wid = window.MaskId;
            _windows[wid] = window;
            window.Closed += (_, _) =>
            {
                _windows.TryRemove(wid, out _);
                window.DisposeWebView();
            };
            window.Show();
            return wid;
        });
    }

    /// <summary>
    /// 关闭指定窗口
    /// </summary>

View on GitHub (pinned to a7cb36712d)

Solutions

  1. 关闭部分已打开的 HTML 遮罩窗口后再创建新窗口
  2. 在脚本中复用已有窗口而不是重复创建
  3. 检查脚本逻辑避免在循环中不断创建窗口

Example fix

打开新窗口前关闭不再需要的遮罩窗口,或复用相同 id 使旧窗口被替换关闭。

When it happens

Trigger: HtmlMaskWindow.Show 时静态字典 _windows 中已打开窗口数达到 MaxWindows 上限,再次打开即抛出。

Common situations: 脚本/功能频繁打开HTML遮罩窗口而未关闭旧窗口(指定相同id会先关闭,不同id则累积)。


AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13). Data as JSON: /api/errors/5ef08b0dfab09238. Report an issue: GitHub.