当用户在我的控制台中键入命令时,我需要将其发送到我创建的Java进程(使用StreamWriter)。有没有办法进行ReadLine类型的回调,所以当用户在控制台中键入内容时,我可以读取它,然后将其传递给我的StreamWriter?
伪代码:
private void UserCommand(string text)
{
if(string.Equals(text, "save"))
{
inputWriter.WriteLine("/save-all");
}
}
答案 0 :(得分:1)
呀。
string input = Console.ReadLine();
UserCommand(input);
答案 1 :(得分:1)
不直接。与GUI编程不同,控制台程序不是事件驱动的。您必须明确地调用Console.ReadLine
,然后依次阻止当前线程并等待用户按下Enter键。然后,您可以拨打UserCommand
。
如果你想在等待用户输入时做其他事情,你必须至少使用两个线程,一个正在工作,一个正在等待ReadLine
返回(然后调用你想要的任何函数)打电话给...)
答案 2 :(得分:0)
您可以使用Console.OpenStandardInput
来获取输入流并使用流的异步函数。
static string command = "";
static System.IO.Stream s;
static bool quit = false;
static byte[] buf = new byte[1];
static void Main(string[] args)
{
s = Console.OpenStandardInput();
s.BeginRead(buf, 0, 1, new AsyncCallback(s_Read), null);
while (!quit)
{
// Do something instead of sleep
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Sleeping");
}
s.Close();
}
public static void s_Read(IAsyncResult target)
{
if (target.IsCompleted)
{
int size = s.EndRead(target);
string input = System.Text.Encoding.ASCII.GetString(buf);
if (input.EndsWith("\n") || input.EndsWith("\r"))
{
if (command.ToLower() == "quit") quit = true;
Console.Write("Echo: " + command);
command = "";
}
else
command += input;
s.BeginRead(buf, 0, 1, new AsyncCallback(s_Read), null);
}
}