私は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を実行すると、完全に実行されます。
それで、これをどのように管理するかについてのアイデアはありますか?