在我的XNA游戏中,我有游戏窗口和运行线程Console.ReadLine()的控制台,因此游戏在等待脚本输入时不会挂起。我试图在游戏窗口关闭,控制台自动关闭以及实际工作的输入(能够在等待输入时打印输出)的地方得到它。 我已经得到它自动从现在这个问题关闭通过使用代码:How to add a Timeout to Console.ReadLine()?终止控制台ReadLine
然而,当我按下回车输入,则会引发ObjectDisposedException。另外,当我宁愿让事情变得瞬间的时候,我也坚持使用超时。我将如何去解决这个问题?
LuaInput = new ConsoleInput();
LuaInputThread = new Thread(new ThreadStart(LuaInput.Run));
LuaInputThread.Start();
感谢:
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();
}
这是由所谓的!
当然,你放置了等待手柄。别。不调用EndInvoke()方法是一个非常不友好的资源泄漏,持续10分钟。好的,如果你不经常这样做。 –