Процесс. Запуск блокируется

Я - обработка вызовов. Запустите, но это блокирует текущий поток.

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

Даже когда процесс закрывается, код больше не отвечает.

Но Процесс. Запуск, как действительно предполагается, блокируется? Что продолжается?

(Процесс запускается правильно),


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

Консольный вывод:

---НАЖМИТЕ ENTER для остановки сервиса---Начинающий процесс.


Найденный им:

[STAThread]

Делает Процесс. Начните блокироваться. Я считал STAThread и Многопоточность, но я не могу связать понятия с Процессом. Запустите поведение.

AFAIK, STAThread требуется Windows. Форма. Как к обходному решению эта проблема при использовании Windows. Форма?


Новости для ада:

Если я восстанавливаю свое приложение, в первый раз, когда я выполняю работу приложения правильно, но если я прекращаю отлаживать и перезапускаю iy снова, проблема araise.

Проблема не повышена, когда приложение выполняется без отладчика.

7
задан Community 23 May 2017 в 10:30
поделиться

1 ответ

Нет, Process.Start не ждет завершения дочернего процесса ... иначе вы не сможете использовать такие функции, как перенаправленный ввод-вывод.

Пример консольного приложения:

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

На моем компьютере без проблем выводится сообщение «Смотрите, я все еще работаю» - что оно делает на вашем компьютере?

12
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: