私のXNAゲームでは、ゲームウィンドウと、Console.ReadLine()を実行しているコンソールがあり、スクリプト入力を待っている間にゲームがハングしないようにしています。私は、ゲームウィンドウが閉じると、コンソールが自動的に閉じて、実際に入力する(入力を待っている間に物事を印刷する機能を備えている)場所を取得しようとしています。 この質問のコードを使用すると、自動的に閉じられるようになりました。How to add a Timeout to Console.ReadLine()?Console ReadLineを終了する
ただし、入力にEnterキーを押すと、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分間持続するかなり面倒なリソースリークです。あなたがこれを頻繁にやっていないならば。 –