【发布时间】:2014-03-23 07:32:36
【问题描述】:
我正在尝试将我曾经在 NSIS 中制作的程序移植到 C# Winforms,我遇到了一个问题,当我调用进程 adb.exe 时,整个程序锁定然后在几秒钟后将最终输出扔给我。
我意识到这可能已经被问过很多次了,但即使经过大量的谷歌搜索,我自己仍然找不到解决方案(而且我是使用 WinForms 的新手)。以下是我的代码:
public static int runAdb(string args, out string output)
{
bAdbRunning = true;
adbProc.StartInfo.Arguments = args;
adbProc.Exited += new EventHandler(adbExitHandler);
adbProc.Start();
// Read all output into string output
output = adbProc.StandardOutput.ReadToEnd();
while (bAdbRunning)
{
System.Threading.Thread.Sleep(100);
}
return adbProc.ExitCode;
}
private static void adbExitHandler(object sender, EventArgs args)
{
bAdbRunning = false;
}
这是调用它的代码:
public static void BaseOperations(Label outputWindow, ProgressBar operationsBar, int opIndex)
{
// Run server
if (opIndex == 0)
{
outputLine(outputWindow, "Shutting down existing adb server");
runAdb("kill-server", out outText);
operationsBar.Value += 1; // 1%
outputLine(outputWindow, "Restarting adb server...");
runAdb("start-server", out outText);
operationsBar.Value += 1; // 2%;
}
}
【问题讨论】:
-
我认为您可以通过收听进程的
Exited事件来实现这一点。 -
Process.WaitForExit方法将阻塞调用线程,直到相关进程退出。在这种情况下,您会阻塞主线程并因此导致 UI 冻结。使用 Sudhakar 所述的Exited事件。
标签: c# .net winforms process exit-code