gpt4 book ai didi

c# - 如何等待C#中的ADB输出?

转载 作者:行者123 更新时间:2023-12-03 11:11:49 25 4
gpt4 key购买 nike

我想使用device命令通过C#程序从通过USB连接的ADB接收信息,然后刷新输出。

Process process = new Process();
process.StartInfo.FileName = "adb.exe";
process.StartInfo.Arguments = "logcat -d -b main -v raw -s Command:I"; // get data in Log.I() with name == "Command"
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();

string output;
do {
process.StandardInput.WriteLine("logcat -d -b main -v raw -s Command:I");
output = process.StandardOutput.ReadToEnd();
} while (output.Length < 1);

Console.WriteLine(output);

process.StandardInput.WriteLine("logcat -c"); // flush logcat

process.WaitForExit();

我知道程序在不断执行 adb logcat -d -b main -v raw -s Command:I,难道没有一种方法可以一次调用命令并等待输出吗?
我可以使用以下命令在Windows提示符下执行此操作:
adb shell 'logcat -b main -v raw -s UNIQUE_TAG:I | (read -n 1 && kill -2 $((BASHPID-1)))'
但这在C#中可行吗?
而且输出似乎没有被刷新

最佳答案

您不能读到最后一次以上; ReadToEnd的最终含义是“直到管道关闭并且我用尽了所有东西,再也没有数据到达”。 ReadToEnd也永远不会结束,直到adb.exe故意表示已完成写入(并且永远不会再次写入)或终止时-这就是为什么您没有那么泛滥的原因。
您可以做的是读取(如果需要,一次读取一个字节/字符),直到只有一行为止-因此,如果这里的期望是“一个命令输入,一个输出输出”,那么这很简单。如果没有办法知道会有多少行返回,那么您通常将使用两个线程,并拥有一个专用的读取器线程,该线程从process.StandardOutput(一次字节/字符,或逐行)中获取数据,并且做它需要做的一切。

关于c# - 如何等待C#中的ADB输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62569734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com