private static async Task RunTeleprompter() { var config = new TelePrompterConfig(); var displayTask = ShowTeleprompter(config); var speedTask = GetInput(config); await Task.WhenAny(displayTask, speedTask); }
private static async Task RunTeleprompter() { var config = new TelePrompterConfig(); var displayTask = ShowTeleprompter(config); var speedTask = GetInput(config); //二つのTaskが完了するまで処理を実行 await Task.WhenAll(displayTask, speedTask); }
private static async Task ShowTeleprompter(TelePrompterConfig config) { var words = ReadFrom("sampleQuotes.txt"); foreach (var word in words) { Console.Write(word); if (!string.IsNullOrWhiteSpace(word)) { await Task.Delay(config.DelayInMilliseconds); } } config.SetDone(); }
/** * 创建一个读取键盘输入的进程。根据录入调节输出速度和监控退出。 < :增加屏幕字符输出间隔50ms; > : 减少屏幕字符输出间隔50ms; x或者X : 退出字符传输出 * config 配置文件 **/ private static async Task GetInput(TelePrompterConfig config){ Action work = () =>{ do{ var key = Console.ReadKey(true); //读取键盘输入 if( key.KeyChar == '>' ){ config.UpdateDelay(-50); //输出屏幕字符间隔减少50ms }else if( key.KeyChar == '<' ){ config.UpdateDelay(50); //输出屏幕字符间隔增加50ms }else if( key.KeyChar == 'x' || key.KeyChar == 'X' ){ config.setDone(); //退出屏幕字符输出 } }while(!config.Done); Console.WriteLine(config.DelayInMilliSeconds); }; await Task.Run(work); //起进程等待键盘输入 }
private static async Task ShowTeleprompter(TelePrompterConfig config) { var words = GetFileContent(FilePath); foreach (var word in words) { //単語の出力に、configで設定されている時間の間隔を設ける Console.Write(word); if (!string.IsNullOrWhiteSpace(word)) { await Task.Delay(config.DelayInMilliseconds); } } //ファイルの読み込みが終了すると、config.Doneをtrueにする config.SetDone(); }
private static async Task GetInput(TelePrompterConfig config) { Action work = () => { do { var key = Console.ReadKey(true); if (key.KeyChar == '>') { config.UpdateDelay(-10); } else if (key.KeyChar == '<') { config.UpdateDelay(10); } else if (key.KeyChar == 'X' || key.KeyChar == 'x') { config.SetDone(); } } while (!config.Done); }; await Task.Run(work); }