2

このコードによって発生する問題に取り組んでいます:

    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のプロパティを設定することです" このスナップショットで。目的は、アニメーションをキャンバス上に表示しながら、その上に描画できるようにすることです (これらの高速スナップショットを実行しないと、キャンバスには静止画像が表示されます)。BackgroundwebViewContent

現在は正常に動作しています(ボタン/リンク/...のクリックが適切に処理されるよう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

結局、それほどでもない...

4

2 に答える 2