Bonjour,
J'ai un petit souci sur la lecture d'un fichier binaire et l'utilisation des fonctions async.
Dans mon fichier, j'ai plusieurs images dont je connais l'offset et la taille. Je développe avec MVS Express 2012 RC sous Windows 8 (Release Preview).
Après qq recherches, je me sert des objets de Windows.Storage.
J'ai donc une fonction qui me renvoie un objet Task<BitmapImage>Je pense que cette fonction fonctionne correctement (je n'en suis pas sur). Mon problème vient de son appel. Je n'ai pas trouver comment exploiter l'objet Task<BitmapImage>. Et sur internet la doc et les exemples explicites sont rares. J'ai bien tenté des trucs comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 async private Task<BitmapImage> GetImageAtPageAsync(int pageNumber) { BitmapImage bitmapImage = null; if (pageNumber > 0 && pageNumber < this.pageInfoList.Count) { MZPage pageInfo = this.pageInfoList[pageNumber]; // Ouverture du fichier StorageFile file = await StorageFile.GetFileFromPathAsync("my\path"); // reader du fichier du fichier IInputStream inputStream = await file.OpenSequentialReadAsync(); DataReader reader = new DataReader(inputStream); // On lit sur la longueur de la taille de l'image await reader.LoadAsync(pageInfo.MiniImage.Size); byte[] dataBytes = new byte[pageInfo.MiniImage.Size]; reader.ReadBytes(dataBytes); // [!!!] WARNING : A première vue risque que d'une copie en trop. A revoire InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); DataWriter dw = new DataWriter(ras.GetOutputStreamAt(0)); dw.WriteBytes(dataBytes); await dw.StoreAsync(); bitmapImage = new BitmapImage(); bitmapImage.SetSource(ras); reader.Dispose(); inputStream.Dispose(); } else { // [!!!] TODO Error message } return bitmapImage; }Mais de temps en temps btTask.Result vaut null, ou bien, a l’exécution l'appli bloque sur await StorageFile.GetFileFromPathAsync(this.MZFilePath);.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Task<BitmapImage> btTask = this.GetMiniImageImageAtPageAsync(pageNumber); btImage = btTask.Result;
La je patauge depuis deux jours. Est ce que qq a une idée de ce qui ne va pas? Ou sinon est-ce que pour le développement sur tablette Win8 en C#/Xaml on a toujours accès au classe non asynchodre (ex l'objet FileStream)? Je ne les ai pas trouvés.
Merci![]()
Partager