2017-10-06 52 views
0

我无法验证这一点是肯定的,但它看起来好像我的应用程序崩溃,因为它的时间太长了我的资源加载。UWP/Win2D - 应用程序崩溃,而装载帆布资源

我相信这是从我的电话来CreateCanvasResourcesAsync

public void OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args) 
    { 
     args.TrackAsyncAction(CreateCanvasResourcesAsync(sender).AsAsyncAction()); 
    } 

    private async Task CreateCanvasResourcesAsync(CanvasControl sender) 
    { 
     if (_tiles.Keys.Count > 0) return; 
     await LoadImageAssets(sender, _tiles); 
    } 

    private async Task LoadImageAssets(CanvasControl canvas, IDictionary<int, CanvasBitmap> dictionary) 
    { 
     dictionary.Add((int)TileTypes.Tile1, await CanvasBitmap.LoadAsync(canvas, @"Assets/Tiles/Tile1.png")); 
     dictionary.Add((int)TileTypes.Tile2, await CanvasBitmap.LoadAsync(canvas, @"Assets/Tiles/Tile2.png")); 
    // etc. 
    } 

我上传约200位图,共计约4MB的大小。

有其他人的经验?如果是这样,你有没有想出一个解决方法?

我已经发现了一些文章,在运行时提供的负载所需要的资源的建议,但他们似乎并不适合与我有这个问题。

+0

是什么'CreateCanvasResourcesAsync(...)执行'什么样子的? – Laith

+0

我已更新说明以包含由CreateCanvasResourceAnsync(...)调用的方法的信息。 –

+0

是否可以从外部加载位图,然后将它们传递到视图中?为了验证图像本身没有问题,我将它们从外部加载到视图中,没有问题。如果有办法将图像注入视图,这将是一个很好的解决方法。 –

回答

0

的问题似乎并没有在所有被Win2D。问题似乎是字典因试图填充太多数据而被炸毁。我没有经过实证证明,但我创造了两个单独的词典,将一半的图像放入一个,另一半放入第二个 - 这个问题就解决了。

有可能设法适应的完整列表字典更好的方法,但是这是一个合理的解决方法了。

+0

词典中的200项不是问题。你是说你必须将你的字典分成两部分,并且每部分载入100个位图? – Laith

+0

是的。将图像分成2个字典解决问题。我有一些字典可以保存100K +行而不会出现问题。我认为这是存储在字典中的数据的大小。但是,我在外部加载所有图像的字典时没有问题......所以我不知道为什么它会使用单个字典失败。 –