【发布时间】:2016-07-11 12:06:33
【问题描述】:
好的,所以我对在 Powershell 中使用 Windows 表单比较陌生,并且由于持续 ping 运行,我在表单全部滞后方面遇到了一些麻烦。从根本上说,我需要做的就是在每次运行 ping 时显示 IP 地址。我试图四处搜索,似乎正确的方法是在后台运行作业?
我认为当前的编写方式是 ping 发生在后台,但我不确定如何更新表单(或者是否有可能让它对其可见?)
这是一个示例,我们将不胜感激。
function global:ContinuousPing{
$global:job = start-job {
while($true){
$pingStatus = Test-Connection google.com -Count 1
$label.text = $pingStatus.IPV4Address.IPAddressToString
#[System.Windows.Forms.Application]::DoEvents()
start-sleep 1
}
}
}
Add-Type -AssemblyName System.Windows.Forms
$pingForm = New-Object System.Windows.Forms.Form
$label = New-Object System.Windows.Forms.Label
$button1 = New-Object System.Windows.Forms.Button
$ping = {
ContinuousPing
while($true){
Receive-Job $job
}
}
$label.Text = "Ping Status"
$button1.Location = New-Object System.Drawing.Point(100,10)
$button1.add_Click($ping)
$pingForm.Controls.Add($label)
$pingForm.Controls.Add($button1)
$pingForm.ShowDialog() | Out-Null
remove-job $job
【问题讨论】:
-
您需要将 ping 发送到后台线程,也许可以查看WPFRunspace
-
你运行的是哪个 powershell 版本?
-
Powershell 版本 3
标签: forms winforms user-interface powershell