Processus.Début bloque

Je suis du Processus appelant.Démarrer, mais elle bloque le thread courant.

pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe");

//Start process
mProcess = new Process();
mProcess.StartInfo = pInfo;
if (mProcess.Start() == false) {
    Trace.TraceError("Unable to run process {0}.");
}

Même lorsque le processus est fermé, le code ne répond plus.

Mais Processus.Commencer est vraiment censé bloquer? Ce qui se passe?

(Le processus démarre pas correctement)


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...");
        }
    }
}

Sortie de la Console est:

--- Appuyez sur ENTRÉE pour arrêter le service ---
Départ du processus.


Trouvé:

[STAThread]

Rend le Processus.Commencer à bloquer. J'ai lu STAThread et le Multithreading, mais je ne peut pas lier les concepts et le Processus.Comportement de démarrage.

Autant que je sache, STAThread est nécessaire par Windows.Forme. Comment contourner ce problème lors de l'utilisation de Windows.Formulaire?


Nouvelles pour l'enfer:

Si je reconstruire ma demande, le première fois que je lance l'application fonctionne correctement, mais si j'arrête de débogage et de redémarrer iy encore une fois, le problème relever.

Le problème ne se pose pas lorsque l'application est exécutée sans le débogueur.

Ensemble UseShellExecute et ErrorDialog de vrai et de voir si il y a des erreurs générées.
Bien, étant donné que nous ne savons pas ce que le "cDaemon" la classe, c'est un peu dur de dire ce qui se passe. S'il vous plaît essayez de venir avec une courte mais programme qui illustre le problème.
(Utilisation de l'Application.DoEvents combiné avec la Console.Lire semble assez suspect.)
Skeet Ici, c'est le travail. " mProcess.Démarrer' blocs, même si a commencé le processus a été fermé.
J'ai une application WinForms qui appelle Process.Start sans blocage.

OriginalL'auteur Luca | 2010-06-19