在我的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();
谢谢!
答案 0 :(得分:1)
您是否尝试过设置主题
IsBackground = true;
?这将强制关闭它并且不允许线程阻塞。