Я - обработка вызовов. Запустите, но это блокирует текущий поток.
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.
Проблема не повышена, когда приложение выполняется без отладчика.
Нет, 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");
}
}
На моем компьютере без проблем выводится сообщение «Смотрите, я все еще работаю» - что оно делает на вашем компьютере?