私はサーバー上で自動化された手順を実行するコンソールアプリケーションを持っています。ただし、ユーザーの入力が必要なルーチンがあります。コンソールに一定時間の間、ユーザーの入力を待機させる方法はありますか?ユーザー入力がない場合は実行を続行しますが、入力がある場合はそれに応じて処理します。ユーザ入力(ReadKey/ReadLine)の間、C#コンソールアプリケーションを(同期的に)待機させる方法はありますか?
答えて
これはかなり難しいものでした。しかし、私は退屈で挑戦のようです: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
}
}
助けてくれてありがとう、フィル!私はもっと単純な解決法が既に組み込まれていると思った。あなたの援助は非常に高く評価されます。 –
これは試しましたか?それは私にとってはうまくいかない。 – Gabe
ガベ、何が問題なの? DoAutomatedProcedures()にブレークポイントを設定してみてください。コール。 *何をすべきかは、コンソールに30秒間コマンドを入力できるようにすることです。どの時点でDoAutomatedProcedures(何もしません)を呼び出します。 –
これは驚くことではありません:新しいスレッドを開始し、この新しいスレッドでReadLineを実行し、メインスレッドが新しいスレッドが終了するまで待ちます。
別のスレッドを使用しても動作しません。スレッドを中止してもI/Oはキャンセルされません。 – Gabe
- 1. 入力ボックスに値が入力される前に、クリックアクションを待機させる方法はありますか?
- 2. 非同期待機待ちではありません
- 3. setTimeoutを同期させる方法はありますか?
- 4. 多くのブラウザでユーザ入力を同期させる
- 5. オブジェクトを数ミリ秒間待機させ、待機時間中にアクティブ待機をキャンセルする方法はありますか?
- 6. ExecutePostProcessingAsync内で非同期メソッドを待機させる方法
- 7. 非同期待機ボタンは常に同期的に実行されます。
- 8. コンピュータ間でhtml5 localstorageを自動的に同期させる方法はありますか?
- 9. パイプlinuxの入出力を同期させる方法は?
- 10. ローカルタイマーベースの時間とNTP時間を定期的に同期させる方法
- 11. ページの動的更新が完了するまでcURLを待機させる方法はありますか?
- 12. C#非同期操作を強制的に同期させる方法
- 13. AutoScalingGroupインスタンスをクラウド形式で待機させる方法はありますか?
- 14. Tera Term - ユーザが入力できるまで待機する
- 15. 挿入ソートの出力が期待通りではありません
- 16. php、ユーザに過去の日付を入力させてもらう方法はありますか?
- 17. C#コンソールアプリケーションがPhPからの入力を読み取る方法
- 18. プログラムを待機させてからボタンを待つのをスキップする方法はありますか?
- 19. C#コンソールアプリケーションでユーザー入力を追跡する方法は?
- 20. コンソールアプリケーションは定期的に出力をフラッシュしません
- 21. WCF非同期コールバック関数でタスクを待機させる方法は?
- 22. C#で非同期タスクが完了するまでメインスレッドを待機させる方法
- 23. Node.js 7.6+で非同期なしでビルトイン待機を使用する方法はありますか?
- 24. "悪意のある"ユーザ入力をレールアプリケーションに拒否する一般的な方法があります
- 25. C#のタスクマネージャでコンソールアプリケーションを非表示にする方法はありますか?
- 26. 非同期タスクが終了するまでの待機方法
- 27. IListを非同期的にフィルタリングする方法はありますか?
- 28. SitecoreにMongoDBデータとSQLデータベースを強制的に同期させる方法はありますか?
- 29. ブラウザ(javascript)とサーバー(asp.net Webサービス/データベース)間でオブジェクトマップを同期させる方法を入力しますか?
- 30. クラスの初期化を待つ方法はありますか?
これを見てください:http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to- console-readline – dextrey