Skip to content

fix: 修复长时间运行后随机闪退的后台线程未处理异常 - #638

Draft
fplj-fplj wants to merge 1 commit into
InkCanvasForClass:net10from
fplj-fplj:fix/random-crash-long-running
Draft

fix: 修复长时间运行后随机闪退的后台线程未处理异常#638
fplj-fplj wants to merge 1 commit into
InkCanvasForClass:net10from
fplj-fplj:fix/random-crash-long-running

Conversation

@fplj-fplj

@fplj-fplj fplj-fplj commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

问题

项目在使用 20 分钟至数小时后出现闪退。此类“运行一段时间后才闪退”通常不是启动即崩,而是后台线程抛出未处理异常导致进程直接退出。

修复内容

针对以下后台线程未处理异常 / 跨线程访问 UI 的路径做防御性修复:

  • SystemEvents.UserPreferenceChanged / DisplaySettingsChanged 在系统事件专用线程触发,原实现直接访问 WPF UI 对象,跨线程访问会抛 InvalidOperationException 并终止进程;现封送到主线程 Dispatcher,并在 Window_Closed 取消订阅 UserPreferenceChanged
  • HandleFloatingBarRecoveryDelayAction 回调在 Timer 线程直接执行 ViewboxFloatingBarMarginAnimation,现改为只负责 Dispatcher.BeginInvoke 封送。
  • 看门狗 watchdogTimer 回调整体增加 try/catch,避免看门狗自身异常成为闪退源。
  • WindowOverviewModel.WindowsUpdatedSystemEventMonitorForegroundWindowChanged/ProcessChangedRulesetServiceStatusUpdated 等事件订阅者异常加兜底,避免在 Timer 线程上冒泡。
  • DelayAction / TimerTrigger / 时间与日期显示定时器回调增加异常保护。

测试情况

由于无可测试环境,尚未测试。

运行 20 分钟至数小时后出现闪退,通常不是启动即崩,而是后台线程
(SystemEvents / System.Threading.Timer / System.Timers.Timer)抛出
未处理异常导致进程直接退出。本次针对以下路径做防御性修复:

- SystemEvents.UserPreferenceChanged / DisplaySettingsChanged 在系统
  事件专用线程触发,原实现直接访问 WPF UI 对象,跨线程访问会抛
  InvalidOperationException 并终止进程;现封送到主线程 Dispatcher,
  并在 Window_Closed 取消订阅 UserPreferenceChanged。
- HandleFloatingBarRecovery 的 DelayAction 回调在 Timer 线程直接
  执行 ViewboxFloatingBarMarginAnimation,现改为仅负责
  Dispatcher.BeginInvoke 封送。
- 看门狗 watchdogTimer 回调整体增加 try/catch,避免看门狗自身异常
  成为闪退源。
- WindowOverviewModel.WindowsUpdated、SystemEventMonitor 的
  ForegroundWindowChanged/ProcessChanged、RulesetService 的
  StatusUpdated 等事件订阅者异常加兜底,避免在 Timer 线程上冒泡。
- DelayAction / TimerTrigger / 时间与日期显示定时器回调增加异常保护。

由于无可测试环境,尚未测试。
@doudou0720

Copy link
Copy Markdown
Member

AnyCPU
x86

公测()

@CJKmkp

CJKmkp commented Aug 22, 2026

Copy link
Copy Markdown
Member

该问题不清楚,此pr暂不受理(在我学校的设备上从未出现此问题)

@CJKmkp
CJKmkp marked this pull request as draft August 22, 2026 08:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants