2009-10-21 3 views
1

mon code extrait les icônes de fichier (ou même les pouces). Cependant, si j'ai beaucoup de fichiers, cela peut prendre un certain temps. J'ai essayé d'utiliser le fil de fond pour charger les icônes. Bitmap créé à partir d'un fichier de formulaire extrait d'une icône et stocké dans la liste. Il semble que pour chaque bitmap natif, il gère uniquement dans le thread propriétaire (c'est-à-dire dans le thread où bitmap est créé).Comment charger les icônes de fichier dans un fil d'arrière-plan [WPF]

  • Dans le thread d'interface utilisateur, créez des bitmaps WPF à partir de ces éléments. Donc, le problème est que je ne sais pas comment utiliser les bitmaps créés dans le thread d'arrière-plan dans le thread UI.

    - ou -

    2b. Créer bitmap wpf dans le thread d'arrière-plan et les utiliser dans le thread UI

    Mais le problème est exactement le même.

  • Répondre

    3

    Vous avez juste besoin de geler les images après les avoir chargées. Les objets gelés sont en lecture seule et peuvent être utilisés en toute sécurité sur plusieurs threads. Par exemple:

    private void _backgroundWorkerLoadImage_DoWork(object sender, DoWorkEventArgs e) 
    { 
        BitmapImage img = new BitmapImage(); 
        img.BeginInit(); 
        img.UriSource = imageUri; 
        img.EndInit(); 
        img.Freeze(); 
        e.Result = img; 
    } 
    
    void _backgroundWorkerLoadImage_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
        var img = e.Result as ImageSource; 
        imageControl.Source = img; 
    } 
    
    +0

    fonctionne très bien! merci –

    1

    Si je comprends ce que vous faites correctement, une façon d'améliorer la performance pourrait être d'introduire une certaine intelligence dans le processus qui est en train de lire les icônes de fichiers.

    Considérons la situation dans laquelle il y a beaucoup de fichiers .DOC dans un répertoire et il n'y a pas beaucoup de point à lire l'icône du fichier pour chacun d'eux.

    Vous auriez un cache d'icônes de fichiers qui ont déjà été lus à la place, donc il ne serait pas nécessaire de lire l'icône du fichier pour chacun des fichiers .DOC. Il y a un compromis ici pour conserver les images en mémoire, mais vous devriez être en mesure d'obtenir un juste milieu entre la performance et l'utilisation de trop de mémoire.

    +0

    vous voyez, le problème est que je ne parle pas seulement des icônes mais aussi de la vignette générée pour moi par les extensions shell. Donc, des fichiers doc différents entraîneront des vignettes différentes. La même chose avec les fichiers .exe - presque tous les programmes ont une icône unique. de toute façon merci pour votre replay –

    Questions connexes