2010-09-09 8 views
0

J'utilise la méthode du service Web pour exécuter des scripts qui génèrent certains dossiers indésirables que je veux supprimer des dossiers après ou avant que le script s'exécute.Le fil est interrompu lors de la suppression de dossiers

ProcessStatus newProcess = 
        new ProcessStatus(
          String.Format(
           "{0}, started:{1}", 
           projectName, DateTime.Now.ToString("HH:m:ss") 
           ) 
          ); 
newProcess.buildData = new BuildHelper(deviceName, projectName, owner, deviceFolder, Constants.serverContentpath, Constants.buildInfoFilePath); 
ProcessStatuses processStatus = new ProcessStatuses(); 
ArrayList allProcesses = processStatus.Get(); 
ArrayList.Synchronized(allProcesses).Add(newProcess); 
ThreadPool.QueueUserWorkItem(
         new WaitCallback(processStatus.startProcessing), 
         new object[] { newProcess, allProcesses } 
         ); 
//Thread th = new Thread(new ThreadStart(delegate { 
// processStatus.startProcessing(new object[] { newProcess, allProcesses }); 
//})); 
//th.Start(); 
processStatus = null; 
newProcess = null; 
_deviceBuildMonitor = null; 
+0

Nous avons besoin d'un peu plus d'informations que de code source. –

+0

Quelle est votre question? –

+0

lorsque je clique sur build, j'exécute le script python uisng asp.net C# en utilisant webmethod. j'appelle la méthode delefoders avant d'exécuter le script, il supprime les dossiers, lance le thread a été abandonnée exception. – Kantesh

Répondre

2

Laissez-moi d'abord recadrer votre question si je comprends bien.

Votre service Web a créé des fichiers temporaires lorsque vous lancez une opération de nettoyage.

Si votre service Web est hébergé sur un serveur IIS, le problème pourrait être que votre pool d'applications IIS redémarre lors de la suppression (Notification de modification de fichier) du répertoire. Essayez d'exécuter ce code soit dans l'événement de démarrage de votre application, soit avant d'essayer de supprimer le répertoire.

var theRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); 
var fcmField = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance); 

var fcm = fcmField.GetValue(theRuntime); 
fcmField.FieldType.GetMethod("Stop", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(fcm, null); 
+0

Merci beaucoup de son miracle de travail pour moi j'ai lutté 3 jours pour cela .. – Kantesh

Questions connexes