PowerShell + WPFで画面の時刻を定期更新する

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。.NET WPFのDispatcherTimer公式仕様を確認し、PowerShellで画面上の時刻を更新する最小イベント駆動TRYに整理しました。

検証ステータス:📘 Microsoft公式仕様確認済み・Windows実機未確認

今回のTRY成功条件は、WPF画面を開いたまま1秒ごとに表示文字が更新されることです。

Smoke Test

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()

Observe

画面を閉じずに時刻が変わるか、閉じたときtimerが停止するかを見ます。イベント配線と後始末が観察点です。

なぜ?

WPFのUIはDispatcherを中心に処理されます。DispatcherTimerのTickもDispatcher queueへ入り、UI要素を同じthread側から更新できます。長い処理をTick内で実行するとUIを止める原因になるため、timer自体が非同期処理を何でも解決するわけではありません。

1か所変える

FromSeconds(1)FromSeconds(2) に変え、更新間隔だけが変わることを確認します。

仕事で使うなら

定期的に状態を再読込する小さな情シス用dashboard、処理待ち表示、ログ件数表示などへ発展できます。まずUI更新だけを確認し、その後に読み取り処理を1つずつ足すと切り分けやすくなります。

公式情報・一次情報

文書情報

記事タイトル
PowerShell + WPFで画面の時刻を定期更新する
作成日
更新日
Source URL
https://papanda925.com/?p=15964

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました