2017-10-06 69 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 +行而不會出現問題。我認爲這是存儲在字典中的數據的大小。但是,我在外部加載所有圖像的字典時沒有問題......所以我不知道爲什麼它會使用單個字典失敗。 –