问题
I'm using powershell to develop a little tool with graphic interface and I'm going crazy with this issue...
For example: I have a label on a form that display "real-time" status of a ping. In the same time, if you click on the label, a popup message is displayed.
function GoogleStatus ($Label)
{
$Google = "www.google.com"
If (Test-Connection -ComputerName $Google -Count 1 -Quiet)
{Label.Text = "Yes"}
else
{Label.Text = "No"}
}
function HelloMsg
{
[System.Windows.Forms.MessageBox]::Show("Hello","Funny Window",0,32)
}
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Size = '150, 220'
$Label = New-Object System.Windows.Forms.Label
$Form.Controls.Add($Label)
$Label.Location = '10, 30'
$Label.Size = '75, 20'
$Label.Add_Click({HelloMsg})
#Timer Init
$Timer = New-Object 'System.Windows.Forms.Timer'
$Timer.Interval = 3000
Timer.Add_Tick({GoogleStatus $Label})
$Timer.Enabled = $True
#Show Interface
$Form.ShowDialog()
During the first 3 secondes of the timer, clicking on the label display correctly the popup message. But if I wait more than 3 seconds, clicking on the label has no effect.
Help please :(
回答1:
I have removed 3 typos in the code, and it seems to work (I still get the popup after 3 seconds have elapsed) :
function GoogleStatus ($Label) {
$Google = "www.google.com"
if(Test-Connection -ComputerName $Google -Count 1 -Quiet) {
$Label.Text = "Yes" # missing $ sign here
} else {
$Label.Text = "No" # missing $ sign here
}
}
function HelloMsg {
[System.Windows.Forms.MessageBox]::Show("Hello","Funny Window",0,32)
}
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Size = '150, 220'
$Label = New-Object System.Windows.Forms.Label
$Form.Controls.Add($Label)
$Label.Location = '10, 30'
$Label.Size = '75, 20'
$Label.Add_Click({HelloMsg})
#Timer Init
$Timer = New-Object 'System.Windows.Forms.Timer'
$Timer.Interval = 3000
$Timer.Add_Tick({ GoogleStatus $Label }) # missing $ sign here
$Timer.Enabled = $True
#Show Interface
$Form.ShowDialog()
回答2:
The timeout value for test-connection has to be less than your timer interval. Thank you @Eric Walker https://stackoverflow.com/users/4270366/eric-walker
来源:https://stackoverflow.com/questions/33577527/mouse-event-dont-work-after-first-timer-tick