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 :

THREADING - Erreur ouverture form avec picturebox


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut THREADING - Erreur ouverture form avec picturebox
    Bonjour,

    Je souhaiterai pouvoir ouvrir un formulaire sur un autre thread. Ce dernier comporte un label et une picturebox avec un gif à l'intérieur. Il s'git d'un formulaire d'attente que j'affiche durant certaines opérations.

    Le problème est que j'ai l'erreur suivante lorsqu'il est sensé s'afficher :

    Nom : 2019-09-25_08h37_29.png
Affichages : 168
Taille : 22,0 Ko

    Vous pouvez voir sur la capture, l'erreur, et le code de construction du thread, avec la procédure d'appel.

    Si quelqu'un a une idée sur la résolution de ce problème, je suis preneur.


    Merci d'avance !

    Cordialement-

  2. #2
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Hello,

    Essaies ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke(New MethodInvoker(Sub() waiting.PictureBox1.Image = My.Resources.WAIT)

  3. #3
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonjour Thovan, merci pour ton aide.

    Je dois mettre ce code dans le Sub du "btn_Rechercher" ou le Sub "DisplayWait" par contre stp ? Merci.

    Cordialement-

  4. #4
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Citation Envoyé par Shennong Voir le message
    Bonjour Thovan, merci pour ton aide.

    Je dois mettre ce code dans le Sub du "btn_Rechercher" ou le Sub "DisplayWait" par contre stp ? Merci.

    Cordialement-
    Tu remplaces la ligne sur laquelle ton programme plante par celle que je t'ai donnée

  5. #5
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Merci, effectivement, on fait un pas en avant

    L'erreur n'apparaît plus, cependant le formulaire "Waiting" ne s'affiche pas

    Je ne comprends pas pourquoi.

    Cordialement-

  6. #6
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Essaies la même chose,
    Remplace Application.Run(Message) par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke(New MethodInvoker(Sub() Application.Run(message))

  7. #7
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Pas d'erreur non plus, mais le formulaire ne s'affiche toujours pas … :s

    Cordialement-

  8. #8
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Remplace la ligne par

  9. #9
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Alors, en mettant juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub DisplayWait()
            Dim message = New Waiting
            Invoke(New MethodInvoker(Sub() message.Show()))
        End Sub
    Le formulaire s'affiche, mais j'ai un th.abort() plus loin, et le formulaire ne se ferme plus XD

  10. #10
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Essayes d'abord avec message.Show() pour voir si il s'ouvre bien...
    Après on regardera pour le fermer.

  11. #11
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Oui c'est bon ça, le message juste au-dessus du tiens (on a dû poster quasiment en même temps) montre que tout fonctionne bine désormais, le formulaire s'affiche bien, cependant il ne se ferme pas lorsque la fonction th.abort() est exécutée à la fin de la recherche.

    Il faudrait peut-être juste mettre Waiting.close() après le abort non ?

    Cordialement-

  12. #12
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Du coup j'ai directement chargé l'image dans le picturebox du formulaire waiting. Lorsque le formulaire s'affiche, l'image s'affiche correctement également.

    Plus qu'à trouver comment le fermer proprement

    Cordialement-

  13. #13
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Oublies le abort()... cette fonction n'est pas fiable... (Cf doc microsoft).
    Je pense que tu peux simplement faire

  14. #14
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Donc, j'ai essayé avec simplement "Waiting.Close()", cela ne fonctionne pas.

    J'ai donc mis ma déclaration "Dim message = new Waiting" en variable de classe pour qu'elle soit accessible depuis le reste du code. En faisant "message.close()", j'obtiens l'erreur suivante :

    Nom : 2019-09-25_11h57_09.png
Affichages : 114
Taille : 21,0 Ko


    Et en fait, sur des recherches plus longues (car là c'était quasi instantané), je me suis aperçu que le formulaire ne s'affichait qu'après la recherche …

    Je pige plus rien là …

    Cordialement-

  15. #15
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Je vais manger et après-midi si tu veux on peux regarder.
    Avec Teamviewer ça serait encore mieux....
    Si tu l'as, tu peux m'envoyer les infos en mp.

  16. #16
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Je vais pas pouvoir faire de TeamViewer. Je suis au boulot, et c'est du travail sur les données client. Désolé.

    Je vais continuer de chercher pour trouver une solution. Je te tiens au courant si je trouve quelque chose.

    Merci de ton aide.

    Cordialement-

  17. #17
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    En fait...
    Tu lances une recherche et pendant l'attente tu veux afficher cette fenêtre et la fermer quand la recherche est terminée...

    Donc, tu fais un thread a part qui fait tourner la fenêtre d'attente....

    Le truc c'est de trouver une subtilité pour dire a cette fenêtre de se fermer quand la recherche est finie...
    Il faudrait par exemple un flag sur False qui devient True quand tu as soit trouvé ce que tu cherches, soit tout balayé sans avoir trouvé....

    Donc pas besoin de la fonction abort()...
    Quand ton flag deviens true, simplement fermer la fenêtre de la même manière que tu l'as appelée devrait fonctionner...

    Je n'ai jamais fait ce genre de code donc difficile à dire sans pouvoir y accéder et tester ... mais je comprends bien que tes données doivent rester privées !

  18. #18
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bon j'ai fini par résoudre mon problème !

    Oui, c'est exactement le fonctionnement que je cherche à avoir, c'est tout à fait ça. Je ne sais pas si on peut s'y prendre autrement, mais c'est le plus "simple" que j'ai pu trouver.

    J'ai modifié le code en suivant quelques exemples sur internet, et ça fonctionne bien, plus d'erreur, et le formulaire se ferme impeccable. Mais c'est en utilisant le abort. C'est pas très propre, mais j'ai essayé d'autres choses et malheureusement ça ne fonctionne pas.

    J'ai essayé de mettre un timer sur le formulaire en question, qui a chaque Tick vérifie une variable booléenne. Normalement, à true, j'ai mis "me.close", mais lorsque je passe la variable à True, il ne se passe rien. Je l'ai bien déclaré en public dans le formulaire précédent, d'où je crée mon thread pourtant.

    Si tu as une idée

    Cordialement-

  19. #19
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Le code modifié :

    Le sub appelé par le nouveau thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Public Sub DisplayWait()
            Dim WaitText = New Waiting()
            'Invoke(New MethodInvoker(Sub() WaitText.PictureBox1.Image = My.Resources.WAIT))
            Application.Run(WaitText)
            'Invoke(New MethodInvoker(Sub() WaitText.Show()))
        End Sub
    et la construction et l'exécution du nouveau thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Dim myThread As Thread = New Thread(New ThreadStart(AddressOf DisplayWait))
            myThread.SetApartmentState(ApartmentState.STA)
            myThread.Start()
    et enfin, pour fermer le formulaire :


  20. #20
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Citation Envoyé par Shennong Voir le message
    Bon j'ai fini par résoudre mon problème !

    Oui, c'est exactement le fonctionnement que je cherche à avoir, c'est tout à fait ça. Je ne sais pas si on peut s'y prendre autrement, mais c'est le plus "simple" que j'ai pu trouver.

    J'ai modifié le code en suivant quelques exemples sur internet, et ça fonctionne bien, plus d'erreur, et le formulaire se ferme impeccable. Mais c'est en utilisant le abort. C'est pas très propre, mais j'ai essayé d'autres choses et malheureusement ça ne fonctionne pas.

    J'ai essayé de mettre un timer sur le formulaire en question, qui a chaque Tick vérifie une variable booléenne. Normalement, à true, j'ai mis "me.close", mais lorsque je passe la variable à True, il ne se passe rien. Je l'ai bien déclaré en public dans le formulaire précédent, d'où je crée mon thread pourtant.

    Si tu as une idée

    Cordialement-
    ça devient compliqué sans voir le truc tourner....
    Ta variable est dans quel formulaire...?
    Je suppose dans celui de départ...? donc tu dois la rebalancer dans ton autre form à chaque fois que tu l'évalues et agir en conséquence......?
    Tout ça m'as l'air bien compliqué.

    Personnellement, quand je mets un truc pour signaler à l'utilisateur que le programme tourne et qu'il doit attendre, je mets un progressbar....
    C'est facile à gérer, mais je ne sais pas si c'est adapté à ton cas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Erreur ouverture excel avec userform sur 2ém PC
    Par Guignol81 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 03/03/2017, 00h08
  2. Réponses: 2
    Dernier message: 01/10/2016, 09h22
  3. Erreur ouverture page avec javascript:window.open
    Par gagouk dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2016, 15h09
  4. Synchroniser la fermeture d'un form avec la fin d'un thread
    Par Jitou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/02/2008, 00h46
  5. Réponses: 1
    Dernier message: 24/07/2007, 12h10

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