Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 15h20   #1
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
Par défaut Lancer une fonction de manière asynchrone

Bonjour,

J'ai un formulaire contenant des info sur des voiture.
(marque, modèle etc...)
Elles sont identifiées par un Identifiant unique.

Ce formulaire contient un sous formulaire "diaporama" qui affiche de 0 à 5 photos de la voiture de l'enregistrement courant

Ces photos sont toutes stockées dans un répertoire et le seul moyen de retrouver les bonnes c'est grâce à l'id de la voiture qui se trouve dans le nom de fichier.
Exemple pour la voiture ayant l'id "007james" on aura dans le répertoire ".\images": 007james.jpg, 007james avant (1).jpg, 007james avant (2).jpg ...etc

il y a actuellement dans ce répertoire 14000 photos

A chaque foi que je veux voir le détail d'une voiture je lance cette fonction qui relève les photos concernant la voiture:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Function GetPicturesPath(idVoiture As String) As Collection
    Dim picturesPath As Collection
    Set picturesPath = New Collection
    Dim fileSystemObj As FileSystemObject
    Set fileSystemObj = New FileSystemObject
    Dim currentDataBase As DAO.Database
    Set currentDataBase = Application.CurrentDb()
    Dim picturesFolder As Folder
    Set picturesFolder = fileSystemObj.GetFolder(fileSystemObj.BuildPath(fileSystemObj.GetParentFolderName(currentDataBase.Name), "\Data\Images"))
    currentDataBase.Close
    Set currentDataBase = Nothing
    Dim pictureFile As File
    For Each pictureFile In picturesFolder.Files
        If Strings.InStr(1, fileSystemObj.GetFileName(pictureFile.Name), idVoiture, VbCompareMethod.vbTextCompare) <> 0 Then 
            picturesPath.Add pictureFile.Name
        End If
    Next
    Set GetPicturesPath = picturesPath
End Function
Le problème c'est que le fait d'ouvrir le répertoire et parcourir tous les noms de fichier, ca prends un certain temps (un peu moins d'une minute pour les 14000 photos) pendant lequel mon formulaire principal est figé...

Je me demandais donc s'il n'était pas possible de ne pas figer le formulaire?

J'ai essayé de lancer la fonction dans un thread séparé mais ca plante car apparemment on ne peut pas créer d'objet dans un thread (Collection, FileSystemObject) (?)

y'a t'il un moyen de lancer la fonction de manière asynchrone?

Auuu pire je pourrais charger tous les noms de fichier en mémoire au chargement de l'appli... mais bon...
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 16h26   #2
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
Il suffit d'appeler DoEvents dans la boucle de traitement
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h10.


 
 
 
 
Partenaires

Hébergement Web