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

VB.NET Discussion :

Questions sur la gestion du chargement des images (Image Handler)


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut Questions sur la gestion du chargement des images (Image Handler)
    Bonjour,

    En 2 mots, l'application que je développe est un front-end, une interface "graphique".
    L'utilisateur navigue dans une liste de jeux et a notamment une copie d'écran du jeux qui s'affiche à droite.
    En voici un screenshot de l'état actuel, pour mieux comprendre

    Ma question est double:
    1) y a t-il un gestionnaire (image handler) de chargement (l'équivalent d'un onLoad Init, onLoad Complete, onLoad Error) pour toutes les étapes du chargement?
    Quelque chose qui permettrai notament une action si il y a une erreur de chargement (image non présente, par ex.) ou dois-je simplement utiliser dans ce cas bien précis un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If My.Computer.FileSystem.FileExists(snapPath) Then
    2) le plus handicapant pour moi, pour l'instant..et qui pourrait avoir un rapport avec la question précédente:
    Si l'utilisateur navigue "gentiment" dans la liste, en pressant le curseur bas, pas de soucis. Mais si on le presse très rapidement (ou pire si l'on laisse son doigt dessus) pour arriver plus rapidement au jeux de son choix, l'affichage devient saccadé, le temps que les screenshots soient chargés un après l'autre.
    Or ce n'est pas le plus important. Le plus important serait que la liste défile à toute vitesse et ne soit pas freinée par le chargement des screenshots, du moins jusqu'à ce que cette vitesse devienne raisonnable, c'est à dire qu'elle corresponde au temps 'normal' pour charger le screenshot
    Dans sa version initiale (développée en ActionScript, et compliée en .exe par MDM Zinc), c'était le cas.

    Pause: merci d'avoir eu la patience de me lire jusqu'içi, pour exposer clairement mon soucis ;-)

    Donc, je me dis que la procédure de chargement devait être interrompue, quand une nouvelle procédure était lancée. En d'autres mots, que l'affichage ne devait se faire que quand l'image était taguée comme 'onLoad Complete=true'

    Donc voila, cette question est sans doute en rapport avec la précédente, et en résumé pourrait se poser ainsi:
    Comment puis-je donner la priorité à ma liste en premier, et que l'image ne soit affichée que quand elle est chargée et qu'il n'y a pas eu entretemps un autre appel au chargement avant que la précédente ne fut affichée.

    Un grand merci pour votre aide!!

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try
      img = image.fromfile(path)
    catch ex as exception
      ' si on passe là c'est qu'on arrive pas à ouvrir l'image
    end try

    après je pense qu'il te manque du multithreading
    genre tu as besoin d'une image, tu la charges sur un autre thread, une fois finie tu l'affiches, si entre temps tu as eut besoin d'une autre, tu lances un nouveau thread de chargement et tu ignores la fin du premier
    si tu n'y connais pas grand chose en multithreading, utilises le backgroundworker

    hormi le temps de chargement des images qui doit être identique, si tu veux une interface graphique qui répond il faut utiliser wpf plutot que windows forms

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    genre tu as besoin d'une image, tu la charges sur un autre thread, une fois finie tu l'affiches, si entre temps tu as eut besoin d'une autre, tu lances un nouveau thread de chargement et tu ignores la fin du premier
    Je pense que c'est exactement ce qu'il me faut!
    Car je pense que c'est mieux que de charger des images (même en tâche de fond) qui de toute façon ne seront pas "vues"
    Aurais tu encore quelques secondes pour m'expliquer (ou me diriger vers une URL de tutorial) pour ignorer la fin du premier thread?

    D'avance merci

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    il y a des dizaines de méthodes ...

    en voici une, et le détail sur le composant backgroundworker pour mieux comprendre : http://www.developpez.net/forums/d10...m/#post5757425


    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
        Private _CheminImageAAcharger As String
     
        Private Sub Depart
            Dim b As New System.ComponentModel.BackgroundWorker
            AddHandler b.DoWork, AddressOf ChargementImage
            AddHandler b.RunWorkerCompleted, AddressOf FinChargementImage
            _CheminImageAAcharger = "chemin du fichier"
            b.RunWorkerAsync(_CheminImageAAcharger)
        End Sub
     
     
        Private Sub ChargementImage(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            Dim b As Image = Image.FromFile(e.Argument.ToString)
            b.Tag = e.Argument ' on place le chemin dans la propriété tag de l'image pour savoir laquelle c'est
            e.Result = b
        End Sub
     
        Private Sub FinChargementImage(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
            If e.Error IsNot Nothing Then
                ' une erreur s'est produite pendant l'évènement DoWork
                Exit Sub
            End If
            Dim b As Image = DirectCast(e.Result, Image)
            If b.Tag.ToString <> _CheminImageAAcharger Then
                ' ce n'est plus celle là qu'on vent
                b.Dispose() ' si on ne veut pas la garder en ram on la détruit
                Exit Sub
            End If
     
            ' afficher b
        End Sub

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/08/2007, 16h49
  2. Réponses: 4
    Dernier message: 13/09/2006, 16h53
  3. question sur la gestion des css
    Par boustor dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 31/07/2006, 16h57
  4. Quelques questions sur la gestion des droits
    Par sylsau dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/03/2006, 14h11
  5. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58

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