当前位置:  开发笔记 > 开发工具 > 正文

等待超时的用户输入

如何解决《等待超时的用户输入》经验,为你挑选了2个好方法。



1> Lars Truijen..:

发现了一些在这里:

$counter = 0
while(!$Host.UI.RawUI.KeyAvailable -and ($counter++ -lt 600))
{
      [Threading.Thread]::Sleep( 1000 )
}


在PowerShell 2中还有"Start-Sleep"cmdlet.
非常感谢你.我在你强大的谷歌福之前鞠躬.

2> nathanchere..:

它现在已经很老了,但我是如何基于相同的KeyAvailable方法解决它的:

https://gist.github.com/nathanchere/704920a4a43f06f4f0d2

它等待x秒,.每秒显示一次,直到最长等待时间.如果按下一个键返回$true,否则$false.

Function TimedPrompt($prompt,$secondsToWait){   
    Write-Host -NoNewline $prompt
    $secondsCounter = 0
    $subCounter = 0
    While ( (!$host.ui.rawui.KeyAvailable) -and ($count -lt $secondsToWait) ){
        start-sleep -m 10
        $subCounter = $subCounter + 10
        if($subCounter -eq 1000)
        {
            $secondsCounter++
            $subCounter = 0
            Write-Host -NoNewline "."
        }       
        If ($secondsCounter -eq $secondsToWait) { 
            Write-Host "`r`n"
            return $false;
        }
    }
    Write-Host "`r`n"
    return $true;
}

并使用:

$val = TimedPrompt "Press key to cancel restore; will begin in 3 seconds" 3
Write-Host $val


上述问题是任何按键都不会被"吞噬".要吞下它,你可以在最终返回之前放入以下内容:`$ host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")`
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有