2011-12-19 10 views
2

私はサーバー上で自動化された手順を実行するコンソールアプリケーションを持っています。ただし、ユーザーの入力が必要なルーチンがあります。コンソールに一定時間の間、ユーザーの入力を待機させる方法はありますか?ユーザー入力がない場合は実行を続行しますが、入力がある場合はそれに応じて処理します。ユーザ入力(ReadKey/ReadLine)の間、C#コンソールアプリケーションを(同期的に)待機させる方法はありますか?

+3

これを見てください:http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to- console-readline – dextrey

答えて

-1

これはかなり難しいものでした。しかし、私は退屈で挑戦のようです:Dこれを試してみてください...

class Program 
{ 
    private static DateTime userInputTimeout; 

    static void Main(string[] args) 
    { 
     userInputTimeout = DateTime.Now.AddSeconds(30); // users have 30 seconds before automated procedures begin 
     Thread userInputThread = new Thread(new ThreadStart(DoUserInput)); 
     userInputThread.Start(); 

     while (DateTime.Now < userInputTimeout) 
      Thread.Sleep(500); 

     userInputThread.Abort(); 
     userInputThread.Join(); 

     DoAutomatedProcedures(); 
    } 

    private static void DoUserInput() 
    { 
     try 
     { 
      Console.WriteLine("User input ends at " + userInputTimeout.ToString()); 
      Console.WriteLine("Type a command and press return to execute"); 

      string command = string.Empty; 
      while ((command = Console.ReadLine()) != string.Empty) 
       ProcessUserCommand(command); 

      Console.WriteLine("User input ended"); 
     } 
     catch (ThreadAbortException) 
     { 
     } 
    } 

    private static void ProcessUserCommand(string command) 
    { 
     Console.WriteLine(string.Format("Executing command '{0}'", command)); 
    } 

    private static void DoAutomatedProcedures() 
    { 
     Console.WriteLine("Starting automated procedures"); 
     //TODO: enter automated code in here 
    } 
} 
+0

助けてくれてありがとう、フィル!私はもっ​​と単純な解決法が既に組み込まれていると思った。あなたの援助は非常に高く評価されます。 –

+0

これは試しましたか?それは私にとってはうまくいかない。 – Gabe

+0

ガベ、何が問題なの? DoAutomatedProcedures()にブレークポイントを設定してみてください。コール。 *何をすべきかは、コンソールに30秒間コマンドを入力できるようにすることです。どの時点でDoAutomatedProcedures(何もしません)を呼び出します。 –

2

これは驚くことではありません:新しいスレッドを開始し、この新しいスレッドでReadLineを実行し、メインスレッドが新しいスレッドが終了するまで待ちます。

+2

別のスレッドを使用しても動作しません。スレッドを中止してもI/Oはキャンセルされません。 – Gabe

関連する問題