【问题标题】:C#: programmatically enter text for console.readlineC#:以编程方式为 console.readline 输入文本
【发布时间】:2010-11-22 20:41:49
【问题描述】:

好的,我知道这是一个糟糕的程序设计,我可能会在稍后解决它,但我正在寻找一个快速修复...

我有一个 C# 程序,它启动一个执行某些工作的线程,然后在主线程中它开始侦听用户输入以手动终止工作人员。伪代码如下所示:

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 的布尔标志并检查 stop || buffer.ToUpper == "STOP"
  • 你的主线程没有做任何有用的事情。启动工作线程的意义不大。
  • @Hamish Grubijan,你能详细说明(也许有一个完整的答案)吗?我想我知道你要去哪里,但我想确定一下。还有@Hans Passant,我认为监听控制台输入来手动停止程序对于主线程来说是一件非常有用的事情!

标签: c# multithreading console


【解决方案1】:

与其这样做,不如让您的工作人员注册一个事件,一旦引发事件,您就可以终止循环并退出应用程序。

【讨论】:

  • @Hamish Grubijan:例如,查看 MSDN 上的 AutoResetEvent 作为解决此问题的一种方法。
  • 监听事件如何停止监听控制台输入?
  • @chezy525 - 他将不得不改变循环的方式,而不是循环用户输入。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2015-02-23
  • 2018-11-01
  • 2012-09-20
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多