このコードによって発生する問題に取り組んでいます:
private int FPS = 60;
void WebView_LoadCompleted(object sender, NavigationEventArgs e)
{
WebviewContentWorker();
}
private async void WebviewContentWorker()
{
WebViewBrush wvb = new WebViewBrush();
wvb.SetSource(WebView);
wvb.Redraw(); //we must redraw at least once before collapsing the WebView
WebView.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
while (true)
{
webViewContent.Background = wvb; //webViewContent is a canvas
await Task.Delay(1000 / FPS);
wvb.Redraw();
}
}
ここで達成しようとしているのは、WebView
非常にずさんな XAML の回避策を見つけることです。その上に物を描画できるようにしたいのですが、できないので、基本的にやっていることは、WebView
( を使用してWebViewBrush
) のスナップショットを繰り返し (フィールドに基づいて)取得し、「」という名前のキャンバスint FPS
のプロパティを設定することです" このスナップショットで。目的は、アニメーションをキャンバス上に表示しながら、その上に描画できるようにすることです (これらの高速スナップショットを実行しないと、キャンバスには静止画像が表示されます)。Background
webViewContent
現在は正常に動作しています(ボタン/リンク/...のクリックが適切に処理されるようTapped
に、イベントを内部に正常にリダイレクトWebView
します)が、どういうわけか遅れています。遅いwvb.Redraw()
のは、スレッドのパフォーマンスをどのように改善できるか疑問に思っていたことです。UI はその間応答しているように見えますが、それ以外のTask.Delay
場合はブロックされています...
どんな入力/アドバイスも大歓迎です!
編集:これが私がRedraw
呼び出しの時間を計った方法です(それを削除するとアプリケーションの応答性が非常に高くなるため、これが問題の原因であると私は信じています):
while (true)
{
webViewContent.Background = wvb;
await Task.Delay(1000 / FPS);
sw.Reset();
sw.Start();
wvb.Redraw();
sw.Stop();
System.Diagnostics.Debug.WriteLine(sw.Elapsed.TotalMilliseconds);
}
出力ウィンドウに次の結果が表示されます。
0,094
0,058
0,041
0,053
0,057
0,038
0,032
0,033
0,032
0,038
0,035
0,03
0,042
0,028
0,044
0,031
0,033
0,029
0,034
0,03
0,052
0,029
結局、それほどでもない...