2014-01-17 6 views
2

Эй, я работаю над тем, что делает следующую логику.Держите дочерний процесс открытым во время опроса данных?

Создать Parent приложения, Создание дочернего процесса, иметь дочерние данные процесса опроса, Передача данных в Parent App,

Все настройки в порядке и работает, когда я вручную Console.WriteLine в дочернем процессе, и я получаю, что штраф в родительское приложение. Проблема заключается в том, что дочерний процесс выполняет опрос ввода с контроллера xbox и затем отправляет эту информацию в родительское приложение. Проблема заключается в том, что единственный способ, которым я могу думать о том, чтобы поддерживать дочерний процесс в жизни, заключается в том, что цикл находится в Main, как только выполняется определенное условие, чем закрытие. Однако цикл while не позволяет процессу опроса, поскольку он просто застрял в цикле. Главное предостережение в том, что опрос проводится через события, поэтому я не могу вручную опросить.

Любые идеи о том, как сохранить опрос типа пассивного события, сохраняя процесс открытым?

Вот установка:

static Battler m_battler = new Battler(); 
static void Main(string[] args) 
    { 
     m_battler = new Battler(); 

     string[] procArgs = (string[])args; 
     if (procArgs.Length == 0) 
     { 
      Console.WriteLine("No Args passed"); 
      Console.Read(); 
      return; 
     } 

     parsedArg = procArgs[0].Split('^'); 

     m_battler.NumBattles = Convert.ToInt32(parsedArg[0]); 

m_battler имеет контроллер в нем, а затем, который использует события для вызова функции для разбора ввода и отправляет его в родительском приложении, снова нет цикла опроса его просто что-то вроде m_xboxController.ProcessedDebugOutput + = новый XboxController.DebugOutputHandler (Результат);

Результат разбирает все затем отправляет его в родительский приложение

private void AddHandler() 
     { 
      Console.WriteLine("handler"); 
      m_xboxController = new XboxController(); 
      TestDelegate testDel = new TestDelegate(Result); 
      m_xboxController.ProcessedDebugOutput += new XboxController.DebugOutputHandler(testDel); 

      threadInit = false; 
     } 

     public void Init(int consoleNum, string activeConsole) 
     { 
      ThreadStart ts = new ThreadStart(AddHandler); 

      outputThread = new Thread(ts); 

      outputThread.Start(); 

      while (threadInit) 
      { 
       continue; 
      } 
     } 

Здесь более подробно о том, что происходит

+1

Почему бы не запустить цикл опроса в отдельной теме? –

+0

Я пробовал это, но все его события управляются, я не знаю, как точно заставить это работать при работе с потоком. Я добавлю немного больше информации в вопрос – Darthlemi

ответ

0

События не волшебно. В зависимости от того, как работает Battler класс или внутренний механизм, обработчик события будет называться:

  1. Синхронно
  2. Асинхронный в отдельном потоке
  3. Асинхронный, вызывая в главном потоке

Первый и второй параметры будут работать с бесконечным циклом (для опции 2 потребуется некоторая синхронизация потоков). Похоже, вы считаете, что вариант 3 имеет место.

Прежде чем я предлагаю решение, вы могли бы предоставить более подробную информацию о том, как именно происходит увольнение? Что заставляет вас думать, что оно отправлено как сообщение в основной поток и должно быть прочитано из цикла сообщений? Что это за класс XboxController, который вы используете?

+0

Эй, жаль, что я отсутствовал на выходные, система событий активизируется таким образом, что контроллер будет вызывать функцию Result через обработчик событий. У меня нет доступа к системе событий Controller, поэтому я вообще не могу ее изменить. Поэтому я регистрирую функцию обратного вызова, и контроллер вызовет ее. Поэтому я думаю, что система событий будет срабатывать, но метод Result не будет вызван из цикла в основном. Я не могу заставить вызвать что-либо в контроллере для ручного опроса данных. – Darthlemi

+0

m_xboxController.ProcessedDebugOutput + = новый XboxController.DebugOutputHandler (результат); Вот как я установил событие, так как я сказал, прежде чем я не могу вручную вызвать обработчик события. :( – Darthlemi

+0

Это не совсем так. Что это за класс XboxController? Google не показывает много. Отправьте ссылку на какую-то документацию/страницу проекта, чтобы я мог посмотреть. –

Смежные вопросы