【发布时间】:2019-06-02 10:52:35
【问题描述】:
我正在尝试在 PowerShell 中的一个小窗口中创建一个简单的表单,该窗口始终位于其他窗口的顶部,并且仅包含一个每 10 秒自动刷新一次的 Web 浏览器对象。我一直在网上搜索并尝试各种选择,但似乎没有任何效果。几乎我遇到的每个示例都在按下按钮时发生表单或 Web 浏览器刷新,但我需要 Web 浏览器在没有任何用户交互的情况下自行自动刷新。从我一直在阅读的内容来看,这听起来像是带有 XAML(可扩展应用程序标记语言)的 WPF(Windows Presentation Foundation)是要走的路,因为 WinForms 被限制在一个线程中,这使得刷新表单更加困难或可能不可能有效地完成。
现在这是我所拥有的(用谷歌测试),没有自动刷新:
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PowerShell HTML GUI" WindowStartupLocation="Manual">
<Grid>
<WebBrowser
HorizontalAlignment="Left"
Width="415"
Height="340"
Margin="10,10,0,0"
VerticalAlignment="Top"
Name="WebBrowser"
/>
</Grid>
</Window>
'@
$reader = New-Object System.Xml.XmlNodeReader($xaml)
$Form = [Windows.Markup.XamlReader]::Load($reader)
$Form.Width = 415
$Form.Height = 340
$Form.Topmost = $True
$WebBrowser = $Form.FindName('WebBrowser')
$WebBrowser.add_Loaded({$this.Navigate('http://www.google.com')})
$Form.ShowDialog()
我尝试在代码末尾添加以下循环来替换$Form.ShowDialog(),但显然这行不通。
While (1) {
Start-Sleep -seconds 10
$WebBrowser.Refresh()
$Form.ShowDialog()
}
我认为我需要使用 System.Windows.Forms.Timer 类,但我不确定如何在没有任何用户交互的情况下将其实现到此示例中。
谁知道这个?
【问题讨论】:
标签: wpf powershell xaml refresh webbrowser-control