0

我在 c# 中有一个完整的命令行应用程序,它具有不同的模块并依赖于多个 dll 等。

现在,我想用另一个 UI 应用程序调用该 CLI 应用程序。但问题是 CLI 应用程序的 Thread 部分不起作用,控件只是跳到最后。那么,有什么办法可以处理这种情况吗?

例如:我有我想调用的应用程序 CLI.exe,所以我编写了以下代码:

Process proc = new Process();
proc.StartInfo.FileName = CLI.exe;
proc.StartInfo.Arguments = args;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
proc.WaitForExit();

现在这调用了我想调用的应用程序。以下代码在我的应用程序 CLI.exe 中

System.Console.WriteLine("Start app {0}", args);
       do
       {
            System.Threading.Thread.Sleep(1000);
       } while (model.Exited == false);
System.Console.WriteLine("Finish app");

现在,在 do while 循环之间,我做了很多 pf 处理,而 model.exit 不会出错。但它会启动应用程序,写入启动应用程序消息,然后它会写入完成应用程序,而其间的处理从未发生过。

model.Exit 也没有处理就成立了。

此外,如果我使用批处理命令运行 C​​LI.exe 或在 cmd 上运行 CLI.exe,它会完美运行。

那么,任何想法如何管理这个?

4

1 回答 1

0

proc.WaitForExit();冻结您的进程,直到子进程完成。删除它并以另一种方式处理进程退出,例如,使用事件:

proc.EnableRaisingEvents = true;
proc.Exited += OnExit;
于 2012-10-18T10:13:09.290 回答