修复停止按钮死循环和消息落库问题

This commit is contained in:
youpaishidifu
2026-08-30 14:03:53 +08:00
parent 96f07353ba
commit 52013d28c1
2 changed files with 37 additions and 13 deletions
+22 -2
View File
@@ -599,6 +599,9 @@ class MsgBotApp(ctk.CTk):
self.ar.set_enabled(self.cfg.get("auto_reply_enabled", False))
self.ar.set_min_score(self.cfg.get("auto_reply_min_score", 0.35))
# ⭐ 防止 _update_stop_ui() 中 deselect() 触发 _toggle_monitor() 回调的标志
self._suppress_toggle_callback = False
self._build_ui()
# 定时从队列取日志刷新
@@ -805,12 +808,21 @@ class MsgBotApp(ctk.CTk):
# ── 回调 ──────────────────────────────
def _toggle_monitor(self):
# ⭐ 防止 _update_stop_ui() 中 deselect() 触发的回调
if self._suppress_toggle_callback:
return
enabled = self._toggle_btn.get()
if enabled:
# 检查知识库是否已加载
if not self.kb.is_ready:
self._log("⚠ 知识库未加载,请先设置知识库路径")
self._toggle_btn.deselect()
# 设置标志防止 deselect() 触发回调
self._suppress_toggle_callback = True
try:
self._toggle_btn._variable.set(False)
finally:
self.after(100, lambda: setattr(self, '_suppress_toggle_callback', False))
return
# 用户手动点击启用 → 彻底重启(重新检测内存,尝试恢复GPU)
self.monitor.start(full_restart=True)
@@ -1442,7 +1454,15 @@ class MsgBotApp(ctk.CTk):
def _update_stop_ui(self):
"""主线程更新急停后的 UI(stop 放到后台线程,主线程不冻结)。"""
self._toggle_btn.deselect()
# ⭐ 设置标志防止 deselect() 触发 _toggle_monitor() 回调
self._suppress_toggle_callback = True
try:
# 直接设置开关变量值,不触发回调
self._toggle_btn._variable.set(False)
finally:
# 延迟重置标志,确保回调已被跳过
self.after(100, lambda: setattr(self, '_suppress_toggle_callback', False))
self._status_label.configure(text="⏸ 急停")
self._log_queue.put("🔄 可点击「启用监控」重新启动")
# ⭐ UI 立即更新;stop() 在后台线程执行,主线程保持响应,不再触发冻结弹窗。