这可能是一个难以回答的问题。我写了一个脚本来检查进程的响应属性。以可视化的脚本正在运行,我创建了一个窗体窗体,你可以看到哪个进程被监视。脚本完美运行,但我无法用我的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)来执行此操作。请注意,链接的问题可能是重复的,但答案是*糟糕的*建议。 –