{"record":{"id":"8c72129990f5b14b","repo":"babalae/better-genshin-impact","slug":"error-8c7212","errorCode":null,"errorMessage":"关闭补充原粹树脂提示超时","messagePattern":"关闭补充原粹树脂提示超时","errorType":"exception","errorClass":"TimeoutException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs","lineNumber":1499,"sourceCode":"        var supplementRect = ScaleRect(850, 730, 250, 60);\n\n        for (var i = 0; i < 50; i++)\n        {\n            _ct.ThrowIfCancellationRequested();\n            var promptExists = page.Ocr(supplementRect).Any(region =>\n                region.Text.Contains(\"补充\", StringComparison.Ordinal)\n                || region.Text.Contains(\"原粹\", StringComparison.Ordinal)\n                || region.Text.Contains(\"树脂\", StringComparison.Ordinal));\n            if (!promptExists)\n            {\n                return;\n            }\n\n            page.Keyboard.KeyPress(User32.VK.VK_ESCAPE);\n            await page.Wait(300);\n        }\n\n        throw new TimeoutException(\"关闭补充原粹树脂提示超时\");\n    }\n\n    /// <summary>\n    /// 关闭领奖结果页面，等待回到主界面。\n    /// </summary>\n    /// <exception cref=\"Exception\">多次尝试后仍未回到主界面时抛出。</exception>\n    private async Task CloseRewardResult()\n    {\n        var page = new BvPage(_ct);\n        var closeRect = ScaleRect(850, 960, 220, 35);\n\n        for (var i = 0; i < 20; i++)\n        {\n            using var capture = CaptureToRectArea();\n            if (Bv.IsInMainUi(capture))\n            {\n                return;\n            }","sourceCodeStart":1481,"sourceCodeEnd":1517,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs#L1481-L1517","documentation":"CloseResinSupplementPrompt 在 supplementRect 区域循环最多 50 次，每次检测到含 '补充'/'原粹'/'树脂' 文本就按 ESC 并等待 300ms，若 50 次（约 15s+）后仍检测到提示则抛 TimeoutException，表示补充树脂弹窗无法被 ESC 关闭。","triggerScenarios":"ESC 未生效（输入焦点不在游戏/被其他弹窗拦截）；OCR 持续误判背景文本含 '补充/原粹/树脂'（误命中导致以为未关闭）；弹窗需要点击而非 ESC 关闭；游戏卡顿使按键丢失。","commonSituations":"领奖后残留界面文字被 OCR 误识别为提示仍在；游戏窗口失焦；ESC 与其他模态叠加；supplementRect 区域覆盖了常驻含树脂字样的 UI。","solutions":["收窄 supplementRect 区域并强化文本匹配（要求连续含 '补充'+'原粹树脂' 而非单字命中）。","改用点击关闭按钮/空白区域而非仅 ESC。","确认游戏窗口处于焦点，输入模拟有效（检查 Simulation.SendInput）。","增加重试次数或等待间隔，并对每次 OCR 做日志便于定位误命中。"],"exampleFix":"// before\nvar promptExists = page.Ocr(supplementRect).Any(region =>\n    region.Text.Contains(\"补充\", StringComparison.Ordinal)\n    || region.Text.Contains(\"原粹\", StringComparison.Ordinal)\n    || region.Text.Contains(\"树脂\", StringComparison.Ordinal));\n\n// after\nvar promptExists = page.Ocr(supplementRect).Any(region =>\n    region.Text.Contains(\"补充原粹树脂\", StringComparison.Ordinal)\n    || region.Text.Contains(\"使用脆弱树脂\", StringComparison.Ordinal)\n    || region.Text.Contains(\"使用须臾树脂\", StringComparison.Ordinal));","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { await CloseResinSupplementPrompt(page); }\ncatch (TimeoutException ex) { _logger.LogWarning(\"{Name}：{Msg}\", Name, ex.Message); /* 可尝试点击关闭或继续后续流程 */ }","preventionTips":["收窄 OCR 区域并要求多关键词组合命中，避免单字误判。","确认游戏窗口焦点与输入模拟有效。","区分'提示仍在'与'背景文字误命中'，必要时改用点击关闭。"],"tags":["ocr","timeout","resin","reward","input-simulation","genshin","autoboss"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}