C# 任何形式循环的Web浏览器逻辑错误
我正在尝试为工作创建一个简单的Kiosk风格的web浏览器。这应该在两个internet选项卡之间自动旋转。永远不会有任何用户输入。静态网页,预先指定,仅用于在我们的主办公室中显示。我正在使用一个C#.NET WPF应用程序,每个选项卡上都有一个TabControl和一个web浏览器。我可以为每个标签预先分配一个网页,很简单。我不能做的是生成无限循环,在两个选项卡之间不断切换。任何循环[while(true)、for(;;)、do while(true)]都将阻止表单加载。提供的代码是我试图首先在循环中生成网页,然后返回并添加自动切换的逻辑C# 任何形式循环的Web浏览器逻辑错误,c#,.net,wpf,C#,.net,Wpf,我正在尝试为工作创建一个简单的Kiosk风格的web浏览器。这应该在两个internet选项卡之间自动旋转。永远不会有任何用户输入。静态网页,预先指定,仅用于在我们的主办公室中显示。我正在使用一个C#.NET WPF应用程序,每个选项卡上都有一个TabControl和一个web浏览器。我可以为每个标签预先分配一个网页,很简单。我不能做的是生成无限循环,在两个选项卡之间不断切换。任何循环[while(true)、for(;;)、do while(true)]都将阻止表单加载。提供的代码是我试图首先
namespace LoopNet
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
while(true)
{
Calendar1.Navigate("http://www.google.com");
GIS1.Navigate("http://www.YouTube.com");
}
}
}
}
在主线程上调用任何类似的东西都会挂起应用程序。正如评论所说,使用计时器 注意:如果Timer.appeased方法正在对UI进行操作,那么它不会喜欢它。对此的快速解决方案是使用Dispatcher invoke方法 你最终会得到以下几点:
public void CreateTimer()
{
var timer = new System.Timers.Timer(1000); // fire every 1 second
timer.Elapsed += HandleTimerElapsed;
}
public void HandleTimerElapsed(object sender, ElapsedEventArgs e)
{
Application.Current.Dispatcher.Invoke(
() =>
{
//do things on UI thread...
SwitchTheTabs();
}
);
添加一个已加载的事件处理程序并将其粘贴在其中 为什么不使用计时器对象并向其已用事件添加一个方法,该方法可以处理切换选项卡。选中此项,使post()代码每秒在选项卡之间有效切换数千次。您是否尝试过在选项卡开关之间实现预设延迟?(这里还有其他问题,但您似乎还没有考虑到您想要的延迟,因为您的代码中实际上没有提到)这将如何解决问题?由于无限循环,UI仍然会冻结。他说他的问题是表单根本无法加载。我同意根据我的原始帖子进行的向下投票——它太简洁了,所以我对它进行了编辑。如果投票被否决是由于其他原因,那么请留下评论,说明原因,以便我也能了解。(在我看来,没有评论的否决票只是有点刻薄)看起来你对我来说修复得很好,我在评论中链接了一个Dispatcher对象,它可能更适合OPs问题。另外,我没有投反对票。