Je peux appeler processus.start, mais il bloque le thread actuel.
using System; using System.Diagnostics; using System.Threading; using System.Windows.Forms; namespace Test { class Test { [STAThread] public static void Main() { Thread ServerThread = new Thread(AccepterThread); ServerThread.Start(); Console.WriteLine (" --- Press ENTER to stop service ---"); while (Console.Read() < 0) { Application.DoEvents(); } Console.WriteLine("Done."); } public static void AccepterThread(object data) { bool accepted = false; while (true) { if (accepted == false) { Thread hThread = new Thread(HandlerThread); accepted = true; hThread.Start(); } else Thread.Sleep(100); } } public static void HandlerThread(object data) { ProcessStartInfo pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe"); Console.WriteLine("Starting process."); // Start process Process mProcess = new Process(); mProcess.StartInfo = pInfo; if (mProcess.Start() == false) { Console.WriteLine("Unable to run process."); } Console.WriteLine("Still living..."); } } }
5 Réponses :
non, Exemple de console app : P> processus.start code> n'attend pas que le processus enfant achète ... sinon vous ne pourriez pas utiliser des fonctionnalités telles que redirigèrent E / S.
using System;
using System.Diagnostics;
public class Test
{
static void Main()
{
Process p = new Process {
StartInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe")
};
p.Start();
Console.WriteLine("See, I'm still running");
}
}
@Curtiswhite: Ce n'est vraiment pas normalement. Je vous suggère de poser une nouvelle question avec un exemple court mais complet.
J'ai posté une nouvelle question concernant. Un aspect unique est d'afficher un formulaire avant l'app.run Stackoverflow.com/Questtions/33466758/...
Comportement très étrange, j'ai pu résoudre en lançant le processus de départ dans son propre thread. J'avais essayé à la fois d'utiliser des retards de temps sur le processus de démarrage et du processus de lancement, le traitement des événements, etc. Le processus de lancement est exécuté à l'intérieur d'une application de script C # Ninjatrader FYI.
Vous avez raison, j'ai supprimé mon commentaire après quelques minutes, mais vous devez le voir avant ma suppression.
@SweatCoder: Yup. Supprimera le mien maintenant, puis supprimer Ceci i> un dans quelques minutes de plus.
Je connais le même comportement de blocage que l'affiche originale d'une application Winforms, j'ai donc créé l'application de console ci-dessous pour simplifier le test de ce comportement.
Jon Skeet's Exemple utilise le Bloc-notes, qui ne prend que quelques millisecondes à charger normalement , donc un bloc de fil peut passer inaperçu. J'essayais de lancer Excel qui prend généralement beaucoup plus de temps. P> appels sur < Code> startinNewThthead code> affichera les deux messages sur la console immédiatement, tandis que l'écran SPLASH pour Excel est toujours ouvert. p> p> startwithpath code> et
startwithinfo code> bloquer mon fil dans une application de console. Ma console n'affiche pas le "processus démarré" jusqu'à la fermeture de l'écran Splash Excel et la fenêtre principale est ouverte. P>
Ouch ... toujours anxieux pour cette question.
Nous avons eu ce problème lors du lancement d'un script .bat qui était sur un lecteur réseau sur un domaine différent (nous avons des domaines à double confiance). J'ai couru un débogueur C # distant et assure assez de processus.Start () bloquait indéfiniment. P>
Lors de la répétition de cette tâche de manière interactive dans la coque d'alimentation, une boîte de dialogue de sécurité apparaissait: P>
aussi loin qu'une solution, C'était la direction , nous sommes allés. La personne qui a fait le travail de domaine de domaine modifié GPO pour accomplir la fiducie. P>
START SERVER via une invite de commande:
"C:\Program Files (x86)\IIS Express\iisexpress" /path:\Publish /port:8080
Définir
userShelexecute code> et
errordialog code> sur true et voyez s'il y a des erreurs générées.
Eh bien donné que nous ne savons pas ce que la classe "CDAemon" fait, il est un peu difficile de dire ce qui se passe. S'il vous plaît essayez de trouver un programme court mais complet i> qui démontre le problème.
(Cette utilisation de l'application.Deevents combinés à la console.Le ahead semble assez méfiant cependant.)
@Jon Skeet Voici l'exemple de travail. Les blocs 'MPRACESS.Start', même si le processus démarré a été fermé.
Trouvé: [Stathread] fait du processus.Start le blocage. Toujours en marche pourquoi!
J'ai une application WinForms qui appelle
processus.start code> sans blocage.
@LUCA: Non, ça ne le fait pas. Je viens de l'appliquer à mon échantillon (voir ma réponse) et cela ne bloque toujours pas. Votre exemple n'est toujours pas un exemple de i> exemple - il n'a pas de déclaration de classe. Je veux quelque chose que je peux juste couper et coller et la voir courir. Idéalement, il devrait utiliser la console.writeine au lieu de suivre une trace pour la simplicité.
Je viens de frapper avec votre exemple pour mettre toutes les directives à l'aide de etc., et elle imprimait "toujours vivre" - c'est-à-dire que cela n'a pas bloqué. Encore une fois, veuillez créer un exemple court mais i> exemple, et dites-nous ce qu'il fait sur votre machine.
En fait, processus.start Block sur ma boîte. Mais éliminer la monthread fonctionne parfaitement.
@Luca: bizarre. Il imprime "toujours vivre" sur ma boîte.
Voir mises à jour. Semble un problème de synchronisation ... Je ne peux pas y croire.