C#: programmatically enter text for console.readline
好吧,我知道这是一个糟糕的程序设计,我可能会在稍后解决它,但我正在寻找一个快速修复…
我有一个 C# 程序,它启动一个执行某些工作的线程,然后在主线程中它开始侦听用户输入以手动终止工作人员。伪代码如下所示:
1
2 3 4 5 6 |
WorkerClass worker = new WorkerClass();
worker.Start(); //function that starts a new worker thread. while(!Console.ReadLine().ToUpper().Equals(“STOP”)){} worker.Join(); //function that cleanly stops the worker thread. |
这很好用,最初工人总是闲逛并不断做事,所以等待我输入”停止”是有意义的。但是,我已经修改了工作线程,以便它最终到达任务的结尾,并且它知道这一点。由于没有其他事情发生,我希望主线程也停止,但它仍在等待来自控制台的输入。那么,无论如何我可以从工作线程中输入在主线程中作为控制台输入读取的文本吗?
我确实希望保持手动干净地停止工作程序的能力,因此仅更改 while 语句以检查工作程序完成而不是控制台输入并不是一个真正的选择。
- 一定会有更好的办法!异步轮询输入,还有一个名为 stop 的 bool 标志并检查 stop || buffer.ToUpper ==”STOP”。
- 您的主线程没有做任何有用的事情。启动工作线程的意义不大。
- @Hamish Grubijan,你能详细说明(也许有一个完整的答案)吗?我想我知道你要去哪里,但我想确定一下。而@Hans Passant,我认为监听控制台输入以手动停止程序对于主线程来说是一件非常有用的事情!
与其这样做,不如让您的工作人员注册一个事件,一旦引发事件,您就可以终止循环并退出应用程序。
- @Hamish Grubijan:例如,查看 MSDN 上的 AutoResetEvent 作为解决此问题的一种方法。
- 监听事件如何停止监听控制台输入?
- @ chezy525 – 他将不得不改变他循环的方式,而不是循环用户输入。
来源:https://www.codenong.com/4250059/