在轮询数据时保持子进程打开?

时间:2014-01-17 22:20:25

标签: c# process

嘿所以我正在做一些符合以下逻辑的事情。

创建父应用程序,创建子进程,让子进程轮询数据,将数据发送到父应用程序,

当我在子进程中手动调试Console.WriteLine时,一切都设置正常并且正在工作,我在父应用程序中收到了这么多。 问题在于子进程正在从xbox控制器轮询输入,然后将该信息发送到父应用程序。问题是,只要满足某个条件而不是关闭,我可以考虑保持子进程存活的唯一方法是在Main中进行while循环。 然而,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中有控制器然后使用事件来调用函数来解析输入并将其发送到父应用程序,再次没有poll循环它就像m_xboxController.ProcessedDebugOutput + = new 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 :(得分:0)

事件并不神奇。根据{{​​1}}类或内部机制的工作方式,将调用事件处理程序:

  1. 的同期
  2. 在单独的线程上异步
  3. 通过调用主线程异步
  4. 第一个和第二个选项将使用无限循环(选项2将需要一些线程同步)。看来您认为选项3就是这种情况。

    在我建议解决方案之前,您能否提供有关该事件如何被触发的更多信息?是什么让你认为它被作为消息发送到主线程并需要从消息循环中读取?你正在使用的这个XboxController类是什么?