关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。我们查阅了 .NET WPF 的 DispatcherTimer 官方规范,并将其整理为使用 PowerShell 更新界面时间的最小事件驱动尝试。
验证状态:📘 已确认 Microsoft 官方规范・Windows 实机未验证
本次尝试的成功条件是:在保持 WPF 界面打开的情况下,显示的文字每秒更新一次。
冒烟测试
Add-Type -AssemblyName PresentationFramework
$w = New-Object Windows.Window
$w.Title = 'DispatcherTimer TRY'
$w.Width = 360; $w.Height = 140
$text = New-Object Windows.Controls.TextBlock
$text.FontSize = 24; $text.Margin = 20
$w.Content = $text
$timer = New-Object Windows.Threading.DispatcherTimer
$timer.Interval = [TimeSpan]::FromSeconds(1)
$timer.Add_Tick({
$text.Text = "[EVENT] " + (Get-Date -Format 'HH:mm:ss')
})
$w.Add_Closed({ $timer.Stop() })
$timer.Start()
$null = $w.ShowDialog()
观察
观察在不关闭界面的情况下时间是否会改变,以及关闭界面时 timer 是否会停止。事件布线和善后处理是观察点。
为什么?
WPF 的 UI 主要由 Dispatcher 处理。DispatcherTimer 的 Tick 也会进入 Dispatcher 队列,从而可以从相同的线程侧更新 UI 元素。如果在 Tick 内执行耗时处理会导致 UI 停止响应,因此 timer 本身并不能解决所有的异步处理问题。
更改一处
FromSeconds(1) 将其更改为 FromSeconds(2),并确认只有更新间隔发生了改变。
如果在工作中应用
可以将其发展为定期重新加载状态的小型 IT 部门仪表盘、处理等待显示、日志条目数显示等。首先只确认 UI 更新,之后再逐个添加读取处理,这样更容易排查问题。

