1

我有一个带有 WebBrowser 控件的 WPF C# 应用程序。该应用程序可在三种不同的平板电脑配置上运行:带有 IE9 的 Windows 7、带有 IE10 的 Windows 8.0(支持连接待机)和带有 IE11 的 Windows 8.1(也支持连接待机)。

如果我们让平板电脑在我们的应用程序运行一个小时或更长时间后进入睡眠状态,然后唤醒它们,在 Windows 8.0 平板电脑上,不再调用 Javascript 计时器回调。已经运行的计时器和新的计时器都不起作用。(我添加了一些日志记录,Javascript 本身仍在运行 - 单击处理程序等)。在这种情况下,Windows 8.1 平板电脑和 Windows 7 平板电脑都可以。

我设置了一个简单的测试页面,只有一个 1 小时计时器和一个设置短超时的按钮。(这类似于应用程序的超时)。我在测试页面上看到了相同的行为:在 Win8.1 和 Win7 平板电脑上,当您在睡眠一个小时或更长时间后唤醒它们时,很快就会调用 1 小时计时器回调,并且按钮超时的回调也作品。但在 Windows 8.0 平板电脑上,两个计时器回调都不会运行。

测试页面代码:

Automatic Hour Counter: <label id="autoCounter">0</label><br>
Manual Counter: <label id="manualCounter">0</label><br>
<button id="manualCount">Set timer for manual counter</button>

<script>
var autoCounter = 0;
var manualCounter = 0;

setInterval(function() {
    autoCounter++;
    $("#autoCounter").text(autoCounter);
}, 3600000);

$("#manualCount").click(function() {
    setTimeout(function() {
        manualCounter++;
        $("#manualCounter").text(manualCounter);
    }, 100);
});
</script>

如果绝对必要,我们或许可以升级 Win8.0 设备,但出于一些原因,我们希望避免这种情况。

有人见过这个吗?有任何想法吗?

编辑:我在 Win8 平板电脑上尝试了 IE10 中的测试页面。它工作正常,所以问题只发生在 WebBrowser 控件上。

编辑2:我找到了解决方法。

如果我添加一个setInterval()超时时间很短的呼叫,那么在设备唤醒后,其他计时器回调所有工作。15 秒有效,30 秒无效,我不会费心进一步缩小范围。

我将保留问题,而不是将其作为答案发布,因为我仍然希望有人有适当的解决方案。:)

4

0 回答 0