终止控制台ReadLine

时间:2011-11-30 20:34:11

标签: c# multithreading console xna

在我的XNA游戏中,我已经获得了游戏窗口和控制台,该控制台正在运行一个线程化的Console.ReadLine(),因此游戏在等待脚本输入时不会挂起。我试图在游戏窗口关闭时,控制台自动关闭,以及实际工作的输入(能够在等待输入时打印出来)。 我现在通过使用此问题的代码自动关闭它:How to add a Timeout to Console.ReadLine()?

但是,当我按Enter键输入时,会抛出ObjectDisposedException。此外,当我发现事情是即时的时,我仍然坚持使用超时。我该如何解决这个问题?

public class ConsoleInput
{
    public bool running = true;

    public void Run()
    {
        String input;
        while (running)
        {
            input = ReadLine(500);
            //stuff
        }
    }

    string ReadLine(int timeoutms)
    {
        ReadLineDelegate d = Console.ReadLine;
        IAsyncResult result = d.BeginInvoke(null, null);
        result.AsyncWaitHandle.WaitOne(timeoutms);//timeout e.g. 15000 for 15 secs
        if (result.IsCompleted)
        {
            string resultstr = d.EndInvoke(result);
            Console.WriteLine("Read: " + resultstr);
            return resultstr;
        }
        result.AsyncWaitHandle.Dispose();
        return "";
    }

    delegate string ReadLineDelegate();
}

由以下人员召集:

LuaInput = new ConsoleInput();
LuaInputThread = new Thread(new ThreadStart(LuaInput.Run));
LuaInputThread.Start();

谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过设置主题

IsBackground = true;?这将强制关闭它并且不允许线程阻塞。