嘿,所以我正在研究执行以下逻辑的东西。
创建父应用程序,创建子进程,让子进程处理轮询数据,将数据发送到父应用程序,
当我在子进程中手动 Console.WriteLine 并且我在父应用程序中收到该消息时,一切都已设置好并且正常工作。 问题在于子进程轮询来自 xbox Controller 的输入,然后将该信息发送到父应用程序。问题是,我能想到的让子进程保持事件状态的唯一方法是在 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 中有 Controller ,然后使用事件调用函数来解析输入并将其发送到父应用程序,同样没有轮询循环,它就像 m_xboxController.ProcessedDebugOutput += new XboxController.DebugOutputHandler(结果);
Result 解析所有内容然后将其发送给父应用
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;
}
}
这里是关于正在发生的事情的更多细节
最佳答案
事件并不神奇。根据 Battler
类或内部机制的工作方式,将调用事件处理程序:
- 同步
- 在单独的线程上异步
- 在主线程上异步调用
第一个和第二个选项将使用无限循环(选项 2 将需要一些线程同步)。看来您相信选项 3 是这种情况。
在我提出解决方案之前,您能否提供更多有关事件具体如何触发的信息?是什么让您认为它是作为消息发送到主线程并且需要从消息循环中读取的?您使用的这个 XboxController 类是什么?
关于c# - 在轮询数据时保持子进程打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197042/