【发布时间】:2019-03-28 10:58:31
【问题描述】:
我正在尝试创建一个 C# 控制台应用程序,该应用程序重复运行 .bat 文件并将输出保存到一个变量中以供以后修改。该脚本旨在使用adb.exe 在已连接设备上获取打开的 TCP 连接。
我希望应用程序在按下 Esc 键时退出(一次)。为了做到这一点,我遵循this answer 并像这样实现它:
Program.cs
static void Main(string[] args)
{
Console.WriteLine("Press escape to quit");
do
{
while (!Console.KeyAvailable)
{
// Console.WriteLine("Application is running");
RunBatch();
}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
Console.WriteLine("While loop was exited");
Console.ReadLine();
}
static void RunBatch()
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = @"C:\Dev\Batch\GetTcpConnections.bat";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
}
GetTcpConnections.bat
@echo off
echo %time%
adb.exe shell cat /proc/net/tcp
timeout /t 1 /nobreak>nul
预期的结果是,控制台应用程序退出循环并在按下 Esc 时直接打印While loop was exited。当我评论 RunBatch() 和取消评论 Console.WriteLine("Application is running" 时,它的工作原理是这样的。但是,当我运行批处理脚本时,我需要在程序退出 while 循环之前按住 Esc 大约一两秒,而不是立即退出。
一开始我以为输入可能被批处理脚本中的timeout /t 1 /nobreak>nul 屏蔽了,但是去掉这行并没有什么区别。我是否在这里遗漏了其他可能会阻止输入的内容?
【问题讨论】:
标签: c# batch-file console-application