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 :

thread et Word


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut thread et Word
    Bonjour

    Depuis une petite appli en c# (winform) j'afficher un document pdf (généré en amont à partir d'un fichier Word) dans un form. Je propose la fonctionnalité "mettre à jour" qui affiche Word et le document, lors de l'enregistrement réalisé à la fermeture de Word (via la boite de dialogue de word) je régénère le fichier pdf à partir du document Word modifié. Sauf que lorsque je veux actualiser mon contrôle qui affiche le document pdf dans mon form j'obtiens le message suivant
    Nom : Capture.PNG
Affichages : 146
Taille : 33,1 Ko

    un extrait de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                var events = (Word.ApplicationEvents4_Event)oWord;
                events.Quit += delegate {
     
     
                    Utilitaire utile = new Utilitaire();
                    Boolean resultat_conversion = utile.converFichierWordPdf(cheminDestination + nomfichierProc, null);
                    // Actualisation du controle
                    axAcroPDF1.Refresh();
     
                };
    Je n'ai pas de notion de Thread en C# et je cherche seulement à actualiser mon controle

    Toutes les idées sont les biens venues

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Le problème que tu as es un soucis classique avec les applications Winform. Dans une application Winform, seul le thread gérant l'interface graphique peut mettre à jour directement les composants graphiques qui le compose. Si tu fais cela à partir d'un autre thread, tu as une exception. Regarde bien ton exception, tu verras que tu as une "Opération inter-thread non valide" (exception caractéristique de ce genre de situation).

    Pour corriger le problème, au lieu de faire directement un
    Il est recommandé de créer une méthode qui sera dédiée à cette action (par exemple, UpdateAcroPDF), et qui contiendra quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void UpdateAcroPDF()
    {
       if (this.axAcroPDF1.InvokeRequired)
       {	
          this.Invoke(new Action(this.axAcroPDF1)));
       }
       else
       {
          this.axAcroPDF1();
       }
    }
    Ensuite, dans ton code de l'événement, tu appelles cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    events.Quit += delegate {
       Utilitaire utile = new Utilitaire();
       Boolean resultat_conversion = utile.converFichierWordPdf(cheminDestination + nomfichierProc, null);
       // Actualisation du controle
       UpdateAcroPDF
    };
    Tu pourras trouver plus d'information sur les appels thread-safe sur les contrôles Windows Form sur le lien suivant : https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Bonjour et merci pour votre réponse, je teste ça et reviens vers vous !

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Super cela fonctionne !
    Merci

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Oup's finalement cela ne plante plus mais pour autant le rafraichissement ne se fait pas !

    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
                    UpdateAcroPDF();
                };
     
            }
            void UpdateAcroPDF()
            {
                if (this.axAcroPDF1.InvokeRequired)
                {
                    this.Invoke(new Action(this.axAcroPDF1.Refresh));
                }
                else
                {
                    this.axAcroPDF1.Refresh();
                }
            }
    Une idée ?

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    As tu demandé à ton contrôle de recharger le document ? La méthode Refresh ne le fait pas. Elle force le contrôle à être redessiner.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    La seule méthode trouvée est de charger à nouveau le fichier via "LoadFile" !
    Par contre dans ma ligne Invoke je n'arrive pas à écrire la bonne syntaxe this.Invoke(new Action(this.axAcroPDF1.LoadFile(value)); !

    Merci

    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
                   UpdateAcroPDF(cheminDestination + leFichierPdf);
                };
     
            }
            UpdateAcroPDF(string value)
            {
                if (this.axAcroPDF1.InvokeRequired)
                {
                    this.Invoke(new Action(this.axAcroPDF1.LoadFile(value));
                }
                else
                {
                    //this.axAcroPDF1.Refresh();
                    this.axAcroPDF1.LoadFile(value);
                }
            }

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Voici un exemple lorsque tu as des paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    UpdateAcroPDF(string value)
    {
       if (this.axAcroPDF1.InvokeRequired)
       {
          this.Invoke(new Action<string>(this.UpdateAcroPDF), value);
          // ou (au choix)
          // this.axAcroPDF1.Invoke(new Action<string>(this.axAcroPDF1.LoadFile), value);
       }
       else
       {
          //this.axAcroPDF1.Refresh();
          this.axAcroPDF1.LoadFile(value);
       }
    }
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup cela fonctionne !

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

Discussions similaires

  1. Accès à Word dans un thread
    Par phpdev dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/02/2013, 11h44
  2. Pilotage de WORD 2003, conditions de retour et exécution inter threads
    Par jmmbb dans le forum Développement Windows
    Réponses: 0
    Dernier message: 18/10/2010, 14h21
  3. Réponses: 0
    Dernier message: 20/04/2009, 10h49
  4. Comment lancer Word dans un thread séparé
    Par Tony49 dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/03/2009, 12h43
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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