Process.Start一个控制台应用程序,在其中输入然后在Form中输出

时间:2017-11-02 11:38:12

标签: c# .net winforms console barcode

我想打开一个看起来像这样的简单控制台应用程序:

    static void Main(string[] args)
    {
        Console.WriteLine("Beginning");
        string smth = Console.ReadLine();
        Console.WriteLine("End");
    }

我打开它感谢Process.Start这样的表格:

    private void button1_Click(object sender, EventArgs e)
    {
        ProcessStartInfo processInfo = new ProcessStartInfo();
        processInfo.FileName = myexe;
        processInfo.CreateNoWindow = true;
        processInfo.UseShellExecute = false;
        processInfo.RedirectStandardOutput = true;
        processInfo.RedirectStandardInput = true;
        processInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
        Process process = new Process();
        process.StartInfo = processInfo;
        process.Start();           
    }

我设法使用StreamReader读取输出并将其放入文本框中:

Beginning
End

但问题是程序不会在Console.ReadLine()等待,就像被忽略一样。而且我不知道如何让用户从键盘输入(如果它直接在控制台中更好)。

有办法吗?

修改

看起来我还不够清楚,抱歉。

我试图制作一个简单的表格,无法控制,能够"做出反应"当我扫描条形码时。

基本上,我希望控制台应用程序能够运行后台,所以当扫描条形码时,我可以将其作为我的output值:

  1. 表格"请扫描您的条形码"
  2. 启动控制台应用
  3. 扫描条形码
  4. 控制台应用关闭
  5. 条形码为output
  6. 所以StandardInput似乎不是我问题的解决方案。

    这就是为什么我问你是否有办法实现这一目标。

1 个答案:

答案 0 :(得分:0)

我不太确定您遇到了什么样的问题,但我注意到您没有使用StandardInput实例的StandardOutputProcess属性(是重定向后你应该做的事情)。看看以下示例是否对您有所帮助。

如果您有此控制台应用程序:

static void Main(string[] args)
{
    Console.WriteLine("Beginning");
    var str = Console.ReadLine();
    Console.WriteLine("End: " + str);
}

你通过这个来调用它:

ProcessStartInfo processInfo = new ProcessStartInfo
{
    FileName = "console_program",
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardInput = true,
};
Process process = new Process
{
    StartInfo = processInfo,
};
process.Start();
process.StandardInput.WriteLine("Hey!");
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

您将获得output值:

"Beginning\r\nEnd: Hey!\r\n"