IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

C# sous Win8, lecture dans un fichier binaire en asynchrone [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut C# sous Win8, lecture dans un fichier binaire en asynchrone
    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>
    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;
            }
    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
    Task<BitmapImage> btTask = this.GetMiniImageImageAtPageAsync(pageNumber);
    btImage = btTask.Result;
    Mais de temps en temps btTask.Result vaut null, ou bien, a l’exécution l'appli bloque sur await StorageFile.GetFileFromPathAsync(this.MZFilePath);.
    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

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    C'est une methode async, donc il suffit de :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var bitmapimage= await GetImageAtPageAsync(pageNumber);

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut
    En effet c'était tout simple
    Merci du coup de main

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture erronée de float dans un fichier binaire
    Par Bourrine dans le forum Langage
    Réponses: 10
    Dernier message: 23/05/2012, 09h12
  2. Lecture dans un fichier binaire
    Par crashtib dans le forum C
    Réponses: 3
    Dernier message: 28/05/2009, 15h13
  3. Réponses: 1
    Dernier message: 10/11/2008, 10h24
  4. Lecture formattée dans un fichier binaire
    Par YéTeeh dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2007, 21h35
  5. Lecture ecriture dans un fichier binaire
    Par laetous dans le forum C
    Réponses: 13
    Dernier message: 26/08/2006, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo