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 :

ThreadAbortException lors d'un CopyTo


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Par défaut ThreadAbortException lors d'un CopyTo
    bonjour, j'ai une méthode de copie de dossiers :
    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
      private void CopierDossier(string sourcePath, string destPath, bool overwrite)
            {
                log.Info(string.Format("CopierDossier : copie du dossier {0} vers {1}", sourcePath, destPath));
                System.IO.DirectoryInfo sourceDir = new System.IO.DirectoryInfo(sourcePath);
                System.IO.DirectoryInfo destDir = new System.IO.DirectoryInfo(destPath);
                if (sourceDir.Exists)
                {
                    if (!destDir.Exists)
                        destDir.Create();
                    // copie des fichiers
                    foreach (System.IO.FileInfo file in sourceDir.GetFiles())
                    {
                        try
                        {
                            if (overwrite)
                                file.CopyTo(System.IO.Path.Combine(destDir.FullName, file.Name), true);
                            else if ((System.IO.File.Exists(System.IO.Path.Combine(destDir.FullName, file.Name))) == false)
                                file.CopyTo(System.IO.Path.Combine(destDir.FullName, file.Name), false);
                        }
                        catch (Exception e)
                        {
                            log.Error(string.Format("Erreur lors de la copie de {0} vers {1}", file.FullName, System.IO.Path.Combine(destDir.FullName, file.Name)), e);
                            throw e;
                        }
                    }
                    // copie des dossiers
                    foreach (System.IO.DirectoryInfo dir in sourceDir.GetDirectories())
                    {
                        CopierDossier(dir.FullName, System.IO.Path.Combine(destDir.FullName, dir.Name), overwrite);
                    }
                }
            }
    qui parfois m'explose à la tête en un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2009-06-23 10:28:48,025 [7] ERROR - System.Threading.ThreadAbortException: Le thread a été abandonné.
       à Microsoft.Win32.Win32Native.CopyFile(String src, String dst, Boolean failIfExists)
       à System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
       à System.IO.FileInfo.CopyTo(String destFileName, Boolean overwrite)
    Sachant que la plupart du temps, cela passe.
    Est ce que quelqu'un aurait une idée de l'origine et pourquoi directement une ThreadAbortException ?

  2. #2
    Membre expérimenté

    Inscrit en
    Septembre 2004
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 105
    Par défaut
    Quel est le contexte dans lequel tu exécute ce code?

    Si c'est ASP.NET, il est possible que ce soit parce que cette méthode dure longtemps et le "application pool" (dans IIS) est recyclé. Par défaut, ça se produit après 20 minutes d'inactivité.

    Sinon, donne plus de détails sur comment ton application marche et quels sont les threads actifs.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Par défaut
    j'ai rajouté dans le web.config.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <system.web>   
    ....
    <httpRuntime executionTimeout="1200"/>
    ....
      </system.web>
    cela marche beaucoup mieux.
    Peut il avoir des effets de bord à cette modification ?

  4. #4
    Membre expérimenté

    Inscrit en
    Septembre 2004
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 105
    Par défaut
    Normalement, ASP.NET n'est pas fait pour des processus qui durent. Considère créer un service Windows.

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

Discussions similaires

  1. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  2. Des déformations pas jolie lors du deplacement de la cam
    Par scorpiwolf dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/11/2002, 13h12
  3. [VB6] [Install] Que se passe-t-il lors du setup?
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/10/2002, 08h26
  4. Réponses: 5
    Dernier message: 06/08/2002, 20h08
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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