我目前正在努力尝试使用“Register-objectevent”Cmdlet 更新 Winforms UI。
我想要做的是让 Register-ObjectEvent 更新表单中的标签,以便在计时器上打勾。
我已经对此进行了数小时的研究,并且我知道这与多线程/调用有关,但是我无法弄清楚如何使其工作!
如果有人可以向我展示/帮助我获取此脚本以通过计时器更新表单上的标签,那就太棒了!我有很多可以从多线程中受益的 Winform,但我需要先了解它!
这是我正在尝试使用的脚本,非常感谢您的帮助:)
[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