我正在编写一个包含多个窗体的powershell脚本。我有一个带按钮的主窗体。如果我klick按钮第二形式打开.第二种形式是通过作业(start-job)初始化的。虽然这也可以在没有工作的情况下工作,但我仍然更喜欢这种方法,因为据我所知,它被认为是winforms的最佳实践。问题是,如果使用作业,则执行时间明显更长,因此应用程序感觉没有响应。
测量命令的输出。
- 没有工作:作业执行时间:4.1125毫秒
- with job:作业执行时间:1348.9928毫秒
我想找到一种方法来加快工作的执行。有没有人有一个提示,我可以改变什么,或者这只是工作的设计?
先谢谢你了
function New-SecondForm {
param(
$text
)
Add-Type -AssemblyName System.Windows.Forms
$popOutForm = New-Object System.Windows.Forms.Form
$popOutForm.Size = New-Object System.Drawing.Size(400, 300)
$popOutForm.Text = "SecondForm"
$enlargedTextBox = New-Object System.Windows.Forms.RichTextBox
$enlargedTextBox.Dock = "Fill"
$enlargedTextBox.Multiline = $true
$enlargedTextBox.ReadOnly = $true
$popOutForm.Controls.Add($enlargedTextBox)
#$popOutForm.ShowDialog()
}
function New-SecondFormJob {
param(
$text
)
$scriptBlock = {
Add-Type -AssemblyName System.Windows.Forms
$popOutForm = New-Object System.Windows.Forms.Form
$popOutForm.Size = New-Object System.Drawing.Size(400, 300)
$popOutForm.Text = "SecondForm"
$enlargedTextBox = New-Object System.Windows.Forms.RichTextBox
$enlargedTextBox.Dock = "Fill"
$enlargedTextBox.Multiline = $true
$enlargedTextBox.ReadOnly = $true
$popOutForm.Controls.Add($enlargedTextBox)
#$popOutForm.ShowDialog()
}
$job = Start-Job -ScriptBlock $scriptBlock
Wait-Job $job | Out-Null
Remove-Job $job
}
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = "PowerShell WinForms Example"
$form.Size = New-Object System.Drawing.Size(300, 200)
$form.StartPosition = "CenterScreen"
$button = New-Object System.Windows.Forms.Button
$button.Text = "New-SecondForm"
$button.Location = New-Object System.Drawing.Point(100, 50)
$button.Size = New-Object System.Drawing.Size(100, 30)
$button2 = New-Object System.Windows.Forms.Button
$button2.Text = "New-SecondFormJob"
$button2.Location = New-Object System.Drawing.Point(100, 100)
$button2.Size = New-Object System.Drawing.Size(100, 30)
$button.Add_Click({
$executionTime = Measure-Command { New-SecondForm } | Select-Object -ExpandProperty TotalMilliseconds
Write-Host = "Job execution time: $executionTime milliseconds"
})
$button2.Add_Click({
$executionTime = Measure-Command { New-SecondFormJob } | Select-Object -ExpandProperty TotalMilliseconds
Write-Host = "Job execution time: $executionTime milliseconds"
})
$form.Controls.Add($button)
$form.Controls.Add($button2)
$form.ShowDialog()
1条答案
按热度按时间wwtsj6pe1#
而不是:
我用过:
结果是: