【问题标题】:Process.Start a console application, input in it then get output in a FormProcess.启动一个控制台应用程序,在其中输入然后在表单中获取输出
【发布时间】:2018-04-14 22:07:34
【问题描述】:

我想打开一个简单的控制台应用程序,如下所示:

    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

所以StandardInput 似乎不能解决我的问题。

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

【问题讨论】:

  • 好吧,您将RedirectStandardInput 设置为true,所以现在控制台应用程序会期望您向它提供输入,而不是通过键盘获取它。

标签: c# .net winforms console barcode


【解决方案1】:

我不太确定你面临什么样的问题,但我注意到你没有使用 Process 实例的 StandardInputStandardOutput 属性(这是你应该做的重定向它们后)。看看下面的例子对你有没有帮助。

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

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"

【讨论】:

  • 感谢您的回答。我已经读过一些关于StandardInput 的文章,但这不是我想要做的。我用更多“细节”编辑了我的帖子
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2016-01-12
相关资源
最近更新 更多