2011-11-30 72 views
3

在我的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(); 
} 

这是由所谓的!

+0

当然,你放置了等待手柄。别。不调用EndInvoke()方法是一个非常不友好的资源泄漏,持续10分钟。好的,如果你不经常这样做。 –

回答

1

您是否尝试设置线程的

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

+0

完美的作品!谢谢。 – pajm