Завершить консоль ReadLine - PullRequest
       7

Завершить консоль ReadLine

3 голосов
/ 01 декабря 2011

В моей игре XNA у меня есть игровое окно и консоль, на которой запущена многопоточная консоль.ReadLine (), поэтому игра не зависает при ожидании ввода сценариев.Я пытаюсь получить его там, где, когда игровое окно закрывается, консоль закрывается автоматически, а также ввод для фактической работы (с возможностью распечатывать вещи, ожидая ввода).Теперь я получил автоматическое закрытие, используя код из этого вопроса: Как добавить Timeout в Console.ReadLine ()?

Однако, когда я нажимаю ввод для ввода,исключение 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 Ответ

1 голос
/ 01 декабря 2011

Вы пытались установить нить

IsBackground = true;?Это заставит его закрыться и не позволит потоку заблокироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...