ReadLine()回调

时间:2011-03-03 01:14:49

标签: c# .net console readline

当用户在我的控制台中键入命令时,我需要将其发送到我创建的Java进程(使用StreamWriter)。有没有办法进行ReadLine类型的回调,所以当用户在控制台中键入内容时,我可以读取它,然后将其传递给我的StreamWriter?

伪代码:

private void UserCommand(string text)
{
    if(string.Equals(text, "save"))
    {
        inputWriter.WriteLine("/save-all");
    }
}

3 个答案:

答案 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);
        }
    }