2016-11-20 3 views
0

J'ai un problème avec l'enregistrement du contenu d'un InkCanvas dans une application UWP. En mode de débogage, tout fonctionne parfaitement. En mode Release, je ne peux pas le sauvegarder.Impossible d'enregistrer le contenu InkCanvas dans l'application UWP dans une base de données SQLite lorsque le mode Libération est activé

Le blob dans la base de données sqlite est vide tout le temps (en mode de libération).

Voici mon code:

static public byte[] GetByteArray(InkCanvas CardInkCanvas) { 
    MemoryStream ms = new MemoryStream(); 

    // Write the ink strokes to the output stream. 
    using(IOutputStream outputStream = ms.AsOutputStream()) { 
     CardInkCanvas.InkPresenter.StrokeContainer.SaveAsync(ms.AsOutputStream()); 
     outputStream.FlushAsync(); 
    } 

    return ms.ToArray(); 
} 

Peut-être un pro UWP peut me aider :)

Merci Agredo

+0

Pourriez-vous vérifier si le contenu du tableau retourné n'est pas vide? –

+0

son vide en mode de libération. En mode débogage fonctionne parfaitement. – Agredo

Répondre

0

J'ai un problème avec la sauvegarde du contenu d'un InkCanvas dans une application UWP. En mode de débogage, tout fonctionne parfaitement. En mode Release, je ne peux pas le sauvegarder.

La compilation de compilation utilise .Net Native par défaut. Il y a donc des comportements différents par rapport au mode débogage.

Dans ce cas, CardInkCanvas.InkPresenter.StrokeContainer.SaveAsync et outputStream.FlushAsync sont des fonctions asynchrones, vous devez ajouter await avant eux. Donc, vos codes devraient ressembler à ceci:

static public async Task<byte[]> GetByteArray(InkCanvas CardInkCanvas) { 
    MemoryStream ms = new MemoryStream(); 

    // Write the ink strokes to the output stream. 
    using(IOutputStream outputStream = ms.AsOutputStream()) { 
     //Add await before async functions so that the async functions get executed before return. 
     await CardInkCanvas.InkPresenter.StrokeContainer.SaveAsync(ms.AsOutputStream()); 
     await outputStream.FlushAsync(); 
    } 

    return ms.ToArray(); 
} 
+0

La fonction doit également être déclarée 'async'. –

+0

Merci, mais maintenant mon octet de code [] strokeContainerArray = GetByteArrayAsync (CardInkCanvas) .Result; s'arrête en mode de déclenchement. En mode débogage, cela fonctionne ... – Agredo

+0

Oui, j'ai oublié d'ajouter 'async' et de changer le type de retour à' Task '. @ PeterTorr-MSFT Merci de rappeler. @Agredo, j'ai mis à jour la réponse, s'il vous plaît essayer les codes mis à jour. –