UWP中的背景渲染

时间:2016-07-25 09:32:50

标签: graphics uwp

我有一个画布控件,我在Draw事件中绘制了许多形状。由于这是在UI线程中,它使应用程序滞后,例如,如果重绘是由更改窗口大小引起的,窗口大小仅在每次重绘后更新,可能是1/2秒。

所以我尝试通过创建RenderTarget来在后台工作器中进行渲染:

RenderTarget = New CanvasRenderTarget(cc, CSng(cc.ActualWidth), CSng(cc.ActualHeight), cc.Dpi)
drawSesh = RenderTarget.CreateDrawingSession
drawSesh.Clear(Windows.UI.Colors.Transparent)

这确实是绘制,但它不会消除滞后,因为我无法在非gui线程上运行渲染,所以我正在使用:

Await cc.Dispatcher.TryRunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, Sub() bgdraw())

..其中cc是我原来的画布控件,我认为这是将任务放回到我试图将其删除的位置。

那么如何创建一个“独立”的gui线程来进行渲染呢?也许我可以通过创建一个单独的(隐藏)形式并在那里完成它,但这看起来笨拙和复杂。

更新: 是的,我可以创建另一个表单,让它进行渲染(和滞后),并从我的主表单触发绘图更新。但是当然如果第二种形式被最小化,它将不会创建CanvasControl Draw事件。但这就是我想要的东西。

或者有没有办法在内存中绘制线条,圆圈,路径等,而不是在gui线程中绘制?

另一个更新:

好的,我试过

Dim cd = CanvasDevice.GetSharedDevice()
RenderTarget = New CanvasRenderTarget(cd, 500, 500, 96)

从正在使用的画布控件中隔离。绘图工作,我可以使用它是一个后台工作者,但它仍然保持gui线程,使形式滞后。所以我找不到任何方法来绘制复杂的图像而不用占用GUI线程

0 个答案:

没有答案