這可能是一個難以回答的問題。我寫了一個腳本來檢查進程的響應屬性。以可視化的腳本正在運行,我創建了一個窗體窗體,你可以看到哪個進程被監視。腳本完美運行,但我無法用我的winform做任何事情。無法最小化或關閉它,只要將光標移動到窗體,我的鼠標光標就會切換到沙漏符號。任何想法爲什麼?爲什麼我的WindowsForm在執行循環時沒有響應
在WinForm也沒有響應,當我註釋掉while循環
這裏是我的代碼:
if ($ShowWindowsForm){
$window = New-Object System.Windows.Forms.Form
$window.text = "Process Watcher"
$window.size = New-Object System.Drawing.Size(350,100)
$window.location = New-Object System.Drawing.Size(100,100)
$icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")
$window.Icon = $Icon
$text = New-Object System.Windows.Forms.Label
$text.Text = "Folgender Prozess wird überwacht:`n$target.exe"
$text.location = New-Object System.Drawing.Size(10,10)
$text.AutoSize = $true
$window.Controls.Add($text)
$window.Show()
}
while (1) {
sleep -Milliseconds 100
if(!((get-process $target).Responding -eq $true)) {
#do stuff
}
http://stackoverflow.com/questions/10794455/ powershell-freezing-gui –
thx,將我的問題標記爲重複 – SimonS
很簡單,實際上:一次只能在單個線程上發生一件事。你正在UI線程上運行一個循環,這會阻止任何UI的同時發生。這意味着你的應用程序變得愚蠢(變得無法響應)。解決方案是在後臺線程上完成所有的處理。不確定Powershell是否具有類似內置的功能。如果沒有,那麼您應該使用爲GUI編程設計的語言(如C#或VB.NET)來執行此操作。請注意,鏈接的問題可能是重複的,但答案是*糟糕的*建議。 –