我正在努力解决这段代码引发的问题:
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();
}
}
我在这里想要实现的是为 XAML 找到一个WebView
我觉得非常草率的解决方法。我希望能够在其上绘制东西,但我不能,所以我基本上做的是重复(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
所以毕竟没有那么多...