私は現在、「Register-objectevent」コマンドレットを使用して Winforms UI を更新しようとしているところです。
私がやろうとしているのは、Register-ObjectEvent を取得して、タイマーを刻むフォームのラベルを更新することです。
私はこれについて何時間もの調査を行ってきましたが、それがマルチスレッド/呼び出しに関係していることは知っていますが、それを機能させる方法について頭を悩ませることはできません!
誰かが私に見せたり、タイマーでフォームのラベルを更新するためにこのスクリプトを取得するのを手伝ってくれたりしたら、それは素晴らしいことです! マルチスレッドの恩恵を受ける多くの Winforms がありますが、最初に頭を悩ませる必要があります。
これが私が機能させようとしているスクリプトです。どんな助けも大歓迎です:)
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[System.Windows.Forms.Application]::EnableVisualStyles() | out-null
$form1 = New-Object System.Windows.Forms.Form
$OnLoadForm_StateCorrection=
{
$form1.WindowState = $InitialFormWindowState
}
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 600
$System_Drawing_Size.Width = 1200
$form1.ClientSize = $System_Drawing_Size
$form1.MaximizeBox = $False
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.KeyPreview = $True
$form1.FormBorderStyle = 1
$form1.Name = "form1"
$form1.StartPosition = 1
$form1.backcolor = [System.Drawing.Color]::FromArgb(255,240,240,240)
$timer = New-Object System.Timers.Timer
$timer.Interval = 1000
$timer.AutoReset = $true
$timeout = 0
$num=0
$action = {
$num++
write-host "test"
$vollabel.text=$num
$timer.stop()
}
Register-ObjectEvent -InputObject $timer -SourceIdentifier TimerElapsed -EventName Elapsed -Action $action
$timer.start()
$vollabel = New-Object System.Windows.Forms.Label
$vollabel.Location = "0,0"
$form1.Controls.Add($vollabel)
$InitialFormWindowState = $form1.WindowState
$form1.add_Load($OnLoadForm_StateCorrection)
$form1.Add_Shown({$form1.Activate()})
$form1.ShowDialog()| Out-Null