我想打开一个看起来像这样的简单控制台应用程序:
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
值:
output
值所以StandardInput
似乎不是我问题的解决方案。
这就是为什么我问你是否有办法实现这一目标。
答案 0 :(得分:0)
我不太确定您遇到了什么样的问题,但我注意到您没有使用StandardInput
实例的StandardOutput
和Process
属性(是重定向后你应该做的事情)。看看以下示例是否对您有所帮助。
如果您有此控制台应用程序:
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"