2017-10-06 4 views
0

Je ne peux pas vérifier cela pour vous, mais il semble que ma demande se bloque parce qu'il prend trop de temps pour mes ressources pour charger.UWP/Win2D - application se bloque alors que les ressources en toile de chargement

je crois qu'il vient de mon appel à 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. 
    } 

Je suis le chargement d'environ 200 bitmaps, pour un total d'environ 4 Mo en taille.

Quelqu'un d'autre a-t-il ressenti cela? Si oui, avez-vous trouvé une solution de contournement?

J'ai trouvé quelques articles qui offrent des suggestions à chargement des ressources nécessaires à l'exécution, mais ils ne semblent pas correspondre avec le problème que je vais avoir.

+0

Qu'est-ce que la mise en œuvre de 'CreateCanvasResourcesAsync (...)' ressembler? – Laith

+0

J'ai mis à jour la description pour inclure des informations sur les méthodes appelées par CreateCanvasResourceAnsync (...). –

+0

Est-il possible de charger les bitmaps à l'extérieur, puis de les transmettre à la vue? Pour vérifier qu'il n'y avait pas de problèmes avec les images elles-mêmes, je les ai chargées en externe à la vue sans problème. S'il y a un moyen d'injecter les images dans la vue, ce serait une bonne solution de contournement. –

Répondre

0

Le problème ne semble pas être Win2D du tout. Le problème semble être que le dictionnaire est en train d'exploser en essayant d'insérer trop de données. Je ne l'ai pas prouvé empiriquement, mais j'ai créé deux dictionnaires séparés, en plaçant la moitié des images dans l'une et l'autre moitié dans la seconde - et le problème a été résolu.

Il y a probablement une meilleure façon de gérer le dictionnaire pour accueillir la liste complète, mais cela est une solution raisonnable pour l'instant.

+0

200 articles dans un dictionnaire n'est pas un problème. Êtes-vous en train de dire que vous avez dû diviser votre dictionnaire en deux et que chacun d'entre eux charge 100 bitmaps? – Laith

+0

Oui. La division des images en deux dictionnaires a résolu le problème. J'ai des dictionnaires qui contiennent 100K + lignes sans problème. Je pensais que c'était la taille des données stockées dans le dictionnaire. Cependant, je chargeais le dictionnaire avec toutes les images externes sans problème ... donc je ne sais pas pourquoi cela échouerait en utilisant un seul dictionnaire. –