RenderTargetBitmap.RenderAsync导致应用程序无异常退出

时间:2015-07-29 01:42:47

标签: c# wpf xaml

使用Windows Phone 8.1应用程序,我希望将一些xaml呈现给图像文件。

this page on the RenderTargetBitmap class开始,我的xaml似乎必须连接到可视树,因此我将该元素插入屏幕外。 在示例部分的上方,它表明了

  

•可以捕获XAML可视树中但在屏幕外的内容,只要它不是Visibility = Collapsed或其他受限制的情况。

所以我认为我很高兴...除了执行RenderAsync方法导致我的应用程序退出而不会触发任何异常。

编辑:我尝试像这样包装我的代码:

    try
    {
        await renderTargetBitmap.RenderAsync(LiveTileSource);
    }
    catch (Exception e)
    {
        throw e;
    }

通过在以await和throw开头的行上放置断点,我可以在我的应用程序中看到执行进入RenderAsync调用。然后应用程序可靠地退出而不会出现任何例外。

2 个答案:

答案 0 :(得分:2)

MSDN文档在the RenderTargetBitmap pagethe RenderTargetBitmap.RenderAsync page之间存在差异。

在第一页:

  

•可以捕获XAML可视化树中但在屏幕外的内容

在第二页:

  

•不会捕获XAML可视化树中但在屏幕外的内容

它似乎因访问冲突而无声地失败。

答案 1 :(得分:0)

不确定我的回答是否相关,但似乎您可以将LiveTileSource放在画布中,将其放在屏幕外,这样就行了。这是我现在用于测试的示例代码:

var tileCanvas = new Canvas();
Canvas.SetLeft(LiveTileSource, Window.Current.Bounds.Right);
Canvas.SetTop(LiveTileSource, Window.Current.Bounds.Bottom);
tileCanvas.Children.Add(LiveTileSource);
page.Children.Add(tileCanvas);

var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(LiveTileSource);
// ...
page.Children.Remove(tileCanvas);

这似乎不会引发访问冲突。