0

私はc#に完全なコマンドラインアプリケーションを持っています。これは異なるモジュールを持ち、複数のdllなどに依存しています。

ここで、そのCLIアプリを別のUIアプリで呼び出したいと思います。ただし、問題は、CLIアプリケーションのスレッド部分が機能せず、コントロールが最後にジャンプすることです。それで、このシナリオを処理する方法はありますか?

例:呼び出したいアプリ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ループの間に、model.exitがfalseにならないようにしながら、多くのpf処理を実行します。ただし、アプリを起動し、アプリの開始メッセージを書き込み、その直後にアプリの終了を書き込みますが、その間の処理は行われませんでした。

model.Exitも処理せずにtrueになりました。

また、バッチコマンドでCLI.exeを実行するか、cmdでCLI.exeを実行すると、完全に実行されます。

それで、これをどのように管理するかについてのアイデアはありますか?

4

1 に答える 1

0

proc.WaitForExit();子プロセスが終了するまでプロセスをフリーズします。それを削除し、イベントを使用するなど、別の方法でプロセスの終了を処理します。

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