2

例如,我创建了一个包含大量形状的 Canvas,如下所示:

var canvas = CreateCanvasThatContainsShapes();

然后我将所有画布添加到主页:

layoutRoot.Content = canvas;

这两行代码运行所需的时间并不多,但是所有形状都需要一段时间才能显示在屏幕上,并且 UI 会在一段时间内无响应。

在 WPF 中,我可以通过执行以下操作来测试可视化树的渲染时间:

//create logic tree and add it to main page
stopWatch.Start();
Dispatcher.BeginInvoke(new Action(()=>{
stopWatch.Stop();
//Show the ellipsed time
}),DispatcherPriority.Loaded);

这样,秒表在创建逻辑树后启动,并在渲染(加载)可视化树后停止。

但是在silverlight中,没有DispatcherPriority,那我该怎么做类似的事情呢?

谢谢

4

1 回答 1

1

您可以使用一个事件来帮助确定渲染到屏幕所需的时间;布局更新。每当布局解析完成时都会触发此事件。在设置之前启动计时器layoutRoot.Content,并在事件触发时停止它。这告诉您渲染过程花费了多长时间。

另一个需要注意的有用事件是CompositionTarget.Rendering,每次呈现 UI 时都会触发此事件。您应该会发现此事件经常触发,但是当您添加复杂的可视化树时,您会在事件流中看到一个间隙。

于 2011-06-17T08:03:44.433 回答