C# Windows应用商店应用程序异步xaml呈现

C# Windows应用商店应用程序异步xaml呈现,c#,xaml,windows-store-apps,C#,Xaml,Windows Store Apps,我尝试在可缩放的ScrollViewer中加载矢量图像,在笔记本电脑上效果很好,但在平板电脑上缩放/取消缩放时速度非常慢。在图像渲染期间,UI被冻结 使用Inkscape将我的图像从svg转换为xaml文件~2,37MB C xaml 如何在背景中渲染画布?不阻塞用户界面。 如果不可能,如何处理此渲染以在渲染时添加ProgressBar?这不是此问题的真正答案,而是临时解决方案 首先用inkscape打开svg文件,并将其放大到我用3500*4000尝试过的大分辨率,然后导出到xaml。这种方法

我尝试在可缩放的ScrollViewer中加载矢量图像,在笔记本电脑上效果很好,但在平板电脑上缩放/取消缩放时速度非常慢。在图像渲染期间,UI被冻结

使用Inkscape将我的图像从svg转换为xaml文件~2,37MB

C

xaml

如何在背景中渲染画布?不阻塞用户界面。
如果不可能,如何处理此渲染以在渲染时添加ProgressBar?

这不是此问题的真正答案,而是临时解决方案

首先用inkscape打开svg文件,并将其放大到我用3500*4000尝试过的大分辨率,然后导出到xaml。这种方法通过保持较小的文件大小来放大图像

在C代码上添加xamlRead.CacheMode=new BitmapCache,这将以导出的大小将图像从矢量渲染为位图


最后,这就像处理一个文件大小较小的非常大的PNG/JPEG图像一样。使用矢量图像的所有其他兴趣都将丢失。但是结果是公平的。

你能提供更多的C代码吗?具体来说,什么时候在事件处理程序中调用它?etc-将让我们知道您是否在UI线程上运行它,这是造成此类延迟的常见原因。编辑了第一篇文章以提供更多C代码,因此我的回答与JaredPar在这个问题上的回答基本相同:-您的平板电脑只是没有足够的能力执行此操作XamlReader。请使用2MB文件加载,无延迟。不幸的是,XamlReader.Load必须在UI线程上使用。您可以尝试减少向量的细节,或者在某个地方可能有第三方替代方案解决此问题。问题不在XamlReader上。加载调用,它在zoom上。缩放后,图像模糊,需要再次渲染,但在新渲染过程中,UI被冻结。我无法滚动模糊图像、触摸其他控件或缩放更多。确定。我的答案仍然是一样的,你的平板电脑无法以与笔记本电脑相同的标准在画布上显示该文件。画布必须在UI线程上运行。如果渲染管道位于后台线程上,则可以研究自定义渲染方法以提高性能。一种方法是渲染静态图像,然后仅在缩放完成后重新渲染。你可以查看谷歌地图,看看这会是什么样子,因为他们使用了类似的技术
public MainPage()
{
    this.InitializeComponent();

    this.Loaded += MainPage_Loaded;

}

async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    string fileContent;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///Images/plan.xaml"));
    using (StreamReader sRead = new StreamReader(await file.OpenStreamForReadAsync()))
            fileContent = await sRead.ReadToEndAsync();

    var xamlRead = XamlReader.Load(fileContent) as Canvas;

    ImgMainGrid.Height = xamlRead.Height;
    ImgMainGrid.Width = xamlRead.Width;
    ImgMainGrid.Children.Add(xamlRead);
}
<ScrollViewer Grid.Row="1" x:Name="scrl" ZoomMode="Enabled" HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" MinZoomFactor="1">
     <Grid x:Name="ImgMainGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ScrollViewer>