WebBrowser コントロールを備えた WPF C# アプリがあります。このアプリは、IE9 を搭載した Windows 7、IE10 を搭載した Windows 8.0 (コネクト スタンバイをサポート)、および IE11 を搭載した Windows 8.1 (コネクト スタンバイもサポート) の 3 つの異なるタブレット構成で実行されます。
アプリを 1 時間以上実行したままタブレットをスリープ状態にしてから起動すると、Windows 8.0 タブレットで Javascript タイマー コールバックが呼び出されなくなります。すでに実行されているタイマーも新しいタイマーも機能しません。(いくつかのロギングを追加しましたが、Javascript 自体は引き続き実行されます - クリック ハンドラなど)。このシナリオでは、Windows 8.1 タブレットと Windows 7 タブレットはどちらも問題ありません。
1 時間のタイマーと短いタイムアウトを設定するためのボタンを備えた簡単なテスト ページをセットアップしました。(これは、アプリのタイムアウトに似ています)。テスト ページでも同じ動作が見られます。Win8.1 および Win7 タブレットでは、1 時間以上スリープした後に起動すると、すぐに 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 秒では機能しません。これ以上絞り込むつもりはありません。
誰かが適切な解決策を持っていることをまだ望んでいるので、これを回答として投稿する代わりに、質問を開いたままにします。:)