好吧所以我在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
答案 0 :(得分:1)
您需要分离GUI更新和ping任务。这很容易用于设计有像C#winforms这样的GUI的语言。如果你试过它,你会比试图在PowerShell上弯曲GUI更容易感到惊讶。
您可以尝试Mathias发布的链接,它可以满足您的需求。