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 :

ThreadPool ne fonctionne plus!


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut ThreadPool ne fonctionne plus!
    Bonjour,

    Je souhaite passer dans le ThreadPool un bloc de code lourd à exécuter cependant le code ci dessous ne renvoi rien, c'est comme ci il rentre même dans la méthode TEST, merci de votre retour sur mon grand problème.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    public void TEST()
            { 
                Object oMissing = System.Reflection.Missing.Value;
                Object oTrue = true;
                Object oFalse = false;
                Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
                Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();
                oWord.Visible = true;
                oWord.Visible = false;
                Object oTemplatePath = @".\1.doc";
                oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);         
     
                foreach (Microsoft.Office.Interop.Word.Range range in oWordDoc.Words)
                {
                    if (range.Text.Trim().Contains("P"))
                    {
                        int pos = range.Text.Trim().IndexOf("P");
                        string str = range.Text.Trim().Replace("P", "");
                        range.Text = str;
                    }
     
                }
                Object oSaveAsFile = "./2.doc";
                oWordDoc.SaveAs(ref oSaveAsFile, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing);
     
                oWordDoc.Close(ref oFalse, ref  oMissing, ref oMissing);
                oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
            }
     
            static void Main(string[] args)
            {
     
     
                    Program test = new Program();
                    ThreadPool.QueueUserWorkItem(o => test.TEST());
            }

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu as vérifié que tu rentrais bien dans la boucle foreach ?

    Pourquoi ne met tu pas une méthode de callback, ainsi tu verrais si elle est appelé ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Tu as vérifié que tu rentrais bien dans la boucle foreach ?

    Pourquoi ne met tu pas une méthode de callback, ainsi tu verrais si elle est appelé ?
    Comment mettre la méthode de callback ? je pense que la méthode TEST n'est pas appelée.
    Merci encore une fois.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Blunt Voir le message
    Comment mettre la méthode de callback ? je pense que la méthode TEST n'est pas appelée.
    Pour le callback, laisse tomber.

    Sinon, si tu met un BP dans ta méthode, est ce que tu break dessus ?

    Sinon, si tu n'appelles pas ta méthode dans plusieurs threads, pourquoi utilises tu le threadPool plutot qu'un thread secondaire "classique".

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Pour le callback, laisse tomber.

    Sinon, si tu met un BP dans ta méthode, est ce que tu break dessus ?
    j'ai mis un writeline dans la méthode TEST, le message n'est pas affiché, donc il entre pas dans ma méthode.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    lors de l'ajout de Thread.Sleep(10000); , je rentre bien dans la méthode TEST, donc c'est un problème de temps. comment peut attendre juste la fin d'exécution de la méthode test ? Merci infiniment.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Mon besoin est d'exécuter la méthode TEST en parallèle (faire 5 génération de fichiers word au mémé temps), merci de votre réponse.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il faut faire un Join sur le Thread qui est lancé car juste après avoir ajouté un item dans la queue tu quittes le fonction main donc le processus se termine (mort du thread primaire)et tous les threads sont terminés. C'est pour cela qu'en ajoutant un Sleep juste après l'ajout d'un item dans une queue cela travaille un peu.

    Tu peux utiliser les event http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    J'ai essayé ce code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Object oMissing = System.Reflection.Missing.Value;
                Object oTrue = true;
                Object oFalse = false;
                Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
                Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();
                oWord.Visible = true;
                oWord.Visible = false;
                Object oTemplatePath = @".\1.doc";
                oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);         
     
                foreach (Microsoft.Office.Interop.Word.Range range in oWordDoc.Words)
                {
                    if (range.Text.Trim().Contains("P"))
                    {
                        int pos = range.Text.Trim().IndexOf("P");
                        string str = range.Text.Trim().Replace("P", "");
                        range.Text = str;
                    }
     
                }
                Directory.CreateDirectory(@"F:\PS-IN\"+threadContext);
                Object oSaveAsFile = @"F:\PS-IN\" + threadContext+"\\" + threadContext + ".doc";
                oWordDoc.SaveAs(ref oSaveAsFile, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing);
                Console.WriteLine(threadContext+" "+DateTime.Now.ToShortTimeString());
                oWordDoc.Close(ref oFalse, ref  oMissing, ref oMissing);
                oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
            }
     
            static void Main(string[] args)
            {
     
                const int FibonacciCalculations = 50;
     
                // One event is used for each Fibonacci object.
                ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
                Program[] fibArray = new Program[FibonacciCalculations];
                Random r = new Random();
     
                // Configure and start threads using ThreadPool.
                Console.WriteLine("launching {0} tasks...", FibonacciCalculations);
                for (int i = 0; i < FibonacciCalculations; i++)
                {
                    doneEvents[i] = new ManualResetEvent(false);
                    Program f = new Program();
                    fibArray[i] = f;
                    ThreadPool.QueueUserWorkItem(f.TEST,i);
                }
     
                // Wait for all threads in pool to calculate.
                WaitHandle.WaitAll(doneEvents);
                Console.WriteLine("All calculations are complete.");
     
    }

    il y a bien la génération des 50 fichiers word, par contre il sort jamais du wait, merci de votre aide.

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    C'est normal, tu ne fais jamais de doneEvents[i].Set(); pour signaler

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    C'est normal, tu ne fais jamais de doneEvents[i].Set(); pour signaler

    Effectivement et cela fonctionne! merci beaucoup, cependant j'ai une dernière question comment peut on passer à la méthode TEST des paramètres comme (string, arraylist,....), car je remarque que la tâche test ne prend en parametre que object . merci d'avance de votre retour.

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Comme cela par exemple :

    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
    32
    33
    34
    35
    36
    37
    38
     
    class Program
    {
     
     
       public void test(Parametre t)
       { 
          //code
     
       }
     
       public class Parametre
       {
          public int T
          {
              get;
    	  set;
          }
     
       }
     
       public static void Main(string[] args)
       {
     
          Program p =new Program();
          Action<Parametre> fct = p.test;
     
          for(int i=0 ; i<10;i++)
          {
     
    	  Parametre pa = new Program.Parametre();
    	  pa.T = i;
     
              ThreadPool.QueueUserWorkItem(state=> fct(pa));
           }
       }
     
    }
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Je n'ai pas pu faire passer un string, j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    string str="test";
      for(int i=0 ; i<10;i++)
      {
     
    	             Parametre pa = new Program.Parametre();
    	             pa.T = i;	
                         ThreadPool.QueueUserWorkItem(state=> fct(str));
       }
    j'ai une erreur de cast de type parametre to string, merci d'avance.

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Oui mais non je te donnais un exemple avec une classe qui encapsule tes paramètres. Si tu n'as besoin que d'une string alors il faut changer 2 choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Action<Parametre> fct = p.test;
     
    par
     
    Action<string> fct = p.test;
    et biensûr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void test(Parametre t)
       { 
          //code
     
       }
     
    par
     
    public void test(string t)
       { 
          //code
     
       }
    Ensuite tu pourras faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string str ="test";
    ThreadPool.QueueUserWorkItem(state=> fct(str));
    Tu comprends la code, ce qu'est une action et comment elle est utilisée avec QueueUserWorkItem ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, je ne gagne pas beaucoup avec le multi tâche est ce que c'est normal?.
    D'après mes estimations, la génération de 4500 fichiers word avec une seule tâche prend un peu plus de 2heures et avec 4 tâches parallèles -> 1h40. j'opte pour faire cette génération dans 15min max, c'est possible ? merci d'avance.

  16. #16
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    oui il y a des limites, avoir plus de thread n'y changera pas grand chose pour des opérations d'entrée sortie(tu peux toujours essayer de créer un thread par fichier), si tu es avec le framewok 4 essaie plutôt les task (tpl) sinon utilise des thread lourd (processus). Ce qui consomme du temps c'est à priori ta boucle (ne faudrait-il pas utilisé UsedRange ?) avec un foreachParallel cela pourrait peut être s'améliorer (à tester)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  17. #17
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Aaaah... Le parallèlisme!
    Malheureusement, ce n'est pas en mettant neuf femmes enceintes qu'on obtient un bébé en 1mois!
    Y'a surement des goulots d'étranglement qui font que malgré la concurrence, il y'a une sérialisation (et donc que tous les threads sont à la file).

  18. #18
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Aaaah... Le parallèlisme!
    Malheureusement, ce n'est pas en mettant neuf femmes enceintes qu'on obtient un bébé en 1mois!
    Y'a surement des goulots d'étranglement qui font que malgré la concurrence, il y'a une sérialisation (et donc que tous les threads sont à la file).
    D'accord, a ton avis les goulots d'étranglement sont située ou ? dans word lui même? j'ai remarqué dans le gestionnaire de tâches windows pleins de processus winword.exe, est ce que c'est la cause de ce ralentissement ? Merci d'avance.

  19. #19
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Blunt Voir le message
    D'accord, a ton avis les goulots d'étranglement sont située ou ? dans word lui même? j'ai remarqué dans le gestionnaire de tâches windows pleins de processus winword.exe, est ce que c'est la cause de ce ralentissement ? Merci d'avance.
    Alors là... Aucune idée! C'est assez complexe à diagnostiquer ca peut dépendre de tellement de paramètres (autant matériels que logiciels)...

  20. #20
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Alors là... Aucune idée! C'est assez complexe à diagnostiquer ca peut dépendre de tellement de paramètres (autant matériels que logiciels)...
    j'ai fais comme suite :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
                int div = FUSIONSS.Count / 4;
                int it = 0;
                foreach (string ste in FUSIONSS)
                {
                    it++;
                    if (it <= div)
                    Program.FUSIONSS_1.Add(ste);
                    else if (it <= (2*div))
                    Program.FUSIONSS_2.Add(ste);
                    else if (it <= (3 * div))
                    Program.FUSIONSS_3.Add(ste);
                    else 
                    Program.FUSIONSS_4.Add(ste);
                }
     
     
                Program.modelee = MODEL[0].ToString();
                const int FibonacciCalculations = 4;
     
                Program[] fibArray = new Program[FibonacciCalculations];
                Random r = new Random();
     
                Console.WriteLine("launching {0} tasks...", FibonacciCalculations);
     
                doneEvents[0] = new ManualResetEvent(false);
                Program f1 = new Program();
                fibArray[0] = f1;
                ThreadPool.QueueUserWorkItem(f1.FUSION, 0);
     
                doneEvents[1] = new ManualResetEvent(false);
                Program f2 = new Program();
                fibArray[1] = f2;
                ThreadPool.QueueUserWorkItem(f2.FUSION2, 1);
     
                doneEvents[2] = new ManualResetEvent(false);
                Program f3 = new Program();
                fibArray[1] = f3;
                ThreadPool.QueueUserWorkItem(f3.FUSION3, 2);
     
                doneEvents[3] = new ManualResetEvent(false);
                Program f4 = new Program();
                fibArray[1] = f4;
                ThreadPool.QueueUserWorkItem(f4.FUSION4, 3);
     
                WaitHandle.WaitAll(doneEvents);
                Console.WriteLine("All calculations are complete.");

    et la méthode de fusion :

    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
    32
    33
    34
    35
    36
     
      public void FUSION(Object threadContext)
       {   
                foreach (string s in FUSIONSS_1)
                {   
     
     
                    String[] tbStr2 = s.Split(new Char[] { ';' });
                    string nb = tbStr2[0];
                    Object oMissing = System.Reflection.Missing.Value;
                    Object oTrue = true;
                    Object oFalse = false;
                    Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
                    Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();
                    oWord.Visible = true;
                    oWord.Visible = false;
                    Object oTemplatePath = modelee;
                    oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
                    bool sympb = false; bool E = false; bool n = false; bool p = false; bool r = false;
     
                    foreach (Microsoft.Office.Interop.Word.Range range in oWordDoc.Words)
                    {if (range.Text.Trim().Contains("P"))
                        {   int pos = range.Text.Trim().IndexOf("P");
                            string str = range.Text.Trim().Replace("P", "O");
                            range.Text = str;} }
                    Directory.CreateDirectory((Object)path + "./PUBLI/" + nb);
                    Object oSaveAsFile = (Object)path + "./PUBLI/" + nb + "/" + nb + ".doc";
                    oWordDoc.SaveAs(ref oSaveAsFile, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing);
                    oWordDoc.Close(ref oFalse, ref  oMissing, ref oMissing);
                    oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
                }
                Initial.doneEvents[int.Parse(threadContext.ToString())].Set();
            }
    j'ai créé 3 autres méthodes en dupliquant la tache fusion, elles correspondent au 4 taches parallèles.
    Merci de vos remarques.

Discussions similaires

  1. CSS ne fonctionne plus depuis le passage au XHTML
    Par Cr@zyDeep dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 27/09/2005, 14h42
  2. recordcount ne fonctionne plus
    Par Oluha dans le forum ASP
    Réponses: 1
    Dernier message: 26/09/2005, 14h24
  3. Réponses: 2
    Dernier message: 22/06/2005, 13h07
  4. mes requetes sous access ne fonctionnent plus
    Par trialrofr dans le forum ASP
    Réponses: 12
    Dernier message: 04/12/2004, 21h52
  5. [JSP][Tomcat]Changement de context -> JSP fonctionne plus
    Par mathieu dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/03/2004, 08h01

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